ZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHllcnJvcnMuaCBiL0luY2x1ZGUvcHllcnJvcnMuaAppbmRleCA4Njg1ODQ5Li4xYWRjNmVjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZXJyb3JzLmgKKysrIGIvSW5jbHVkZS9weWVycm9ycy5oCkBAIC02Miw2ICs2Miw5IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19XaW5kb3dzRXJyb3I7CiAjZW5kaWYKKyNpZmRlZiBfX1ZNUworZXh0ZXJuIERMX0lNUE9SVChQeU9iamVjdCAqKSBQeUV4Y19WTVNFcnJvcjsKKyNlbmRpZgogCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX01lbW9yeUVycm9ySW5zdDsKIApkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDI4MWFlYjIuLjNlZjRkOGEgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTQwNSw2ICs0MDUsNyBAQAogQWRyaWFuIFBoaWxsaXBzCiBDaHJpc3RvcGhlciBKLiBQaG9lbml4CiBOZWFsZSBQaWNrZXR0CitKZWFuLUZyYW7nb2lzIFBp6XJvbm5lCiBEYW4gUGllcnNvbgogTWFydGlqbiBQaWV0ZXJzCiBGcmFu529pcyBQaW5hcmQKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA5MWZlMDQ5Li4wZTg4M2JiIDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC04MjYsNiArODI2LDggQEAKIE5ldyBwbGF0Zm9ybXMKIC0tLS0tLS0tLS0tLS0KIAorLSBPcGVuVk1TIGlzIG5vdyBzdXBwb3J0ZWQuCisKIC0gQXRoZU9TIGlzIG5vdyBzdXBwb3J0ZWQuCiAKIC0gdGhlIEVNWCBydW50aW1lIGVudmlyb25tZW50IG9uIE9TLzIgaXMgbm93IHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hvdHNob3QuYyBiL01vZHVsZXMvX2hvdHNob3QuYwppbmRleCAzNzg3OWI5Li41MzEzMGQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19ob3RzaG90LmMKKysrIGIvTW9kdWxlcy9faG90c2hvdC5jCkBAIC05NDcsNyArOTQ3LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChtYWNpbnRvc2gpIHx8IGRlZmluZWQoUFlPU19PUzIpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKG1hY2ludG9zaCkgfHwgZGVmaW5lZChQWU9TX09TMikgfHwgXAorICAgIGRlZmluZWQoX19WTVMpCiAgICAgcnVzYWdlX2RpZmYgPSAtMTsKICNlbHNlCiAgICAgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRidWlsZGluZm8uYyBiL01vZHVsZXMvZ2V0YnVpbGRpbmZvLmMKaW5kZXggYjU5ZDlhNy4uMjNiNTdjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRidWlsZGluZm8uYworKysgYi9Nb2R1bGVzL2dldGJ1aWxkaW5mby5jCkBAIC0yOCwxMiArMjgsNzAgQEAKICNkZWZpbmUgQlVJTEQgMAogI2VuZGlmCiAKKyNpZmRlZiBfX1ZNUworIyAgaWZkZWYgX19ERUNDCisjICAgIHByYWdtYSBleHRlcm5fbW9kZWwgc2F2ZQorIyAgICBwcmFnbWEgZXh0ZXJuX21vZGVsIHN0cmljdF9yZWZkZWYKK2V4dGVybiBsb25nIGN0bCRnbF9pbWdoZHJiZjsKKyMgICAgcHJhZ21hIGV4dGVybl9tb2RlbCByZXN0b3JlCisjICBlbmRpZgorCisjICBpZmRlZiBfX0FMUEhBCisjICAgIGRlZmluZSBFSUhEJExfSU1HSURPRkYgMjQKKyMgICAgZGVmaW5lIEVJSEkkUV9MSU5LVElNRSAgOAorIyAgICBkZWZpbmUgX0lNR0lET0ZGIEVJSEQkTF9JTUdJRE9GRgorIyAgICBkZWZpbmUgX0xJTktUSU1FIEVJSEkkUV9MSU5LVElNRQorIyAgZWxzZQorIyAgICBkZWZpbmUgSUhEJFdfSU1HSURPRkYgIDYKKyMgICAgZGVmaW5lIElISSRRX0xJTktUSU1FIDU2CisjICAgIGRlZmluZSBfSU1HSURPRkYgSUhEJFdfSU1HSURPRkYKKyMgICAgZGVmaW5lIF9MSU5LVElNRSBJSEkkUV9MSU5LVElNRQorIyAgZW5kaWYgLyogX19WTVMgKi8KKworbG9uZyoKK3Ztc19fZ2V0X2xpbmt0aW1lICh2b2lkKQoreworCWxvbmcqIGFsX2ltZ2hkcmJmOworCXVuc2lnbmVkIHNob3J0KiBhd19pbWdpZG9mZjsKKwl1bnNpZ25lZCBzaG9ydAkgIHdfaW1naWRvZmY7CisJbG9uZyogYXFfbGlua3RpbWU7CisJdW5zaWduZWQgY2hhciogYWJfaWhpOworCisJYWxfaW1naGRyYmYgPSAmY3RsJGdsX2ltZ2hkcmJmOworCisJYWxfaW1naGRyYmYgPSAobG9uZyAqKSphbF9pbWdoZHJiZjsKKwlhbF9pbWdoZHJiZiA9IChsb25nICopKmFsX2ltZ2hkcmJmOworCisJYXdfaW1naWRvZmYgPSAodW5zaWduZWQgc2hvcnQgKikKKwkJKCh1bnNpZ25lZCBjaGFyICopYWxfaW1naGRyYmYgKyBfSU1HSURPRkYpOworCisJd19pbWdpZG9mZiA9ICphd19pbWdpZG9mZjsKKworCWFiX2loaSA9ICh1bnNpZ25lZCBjaGFyICopYWxfaW1naGRyYmYgKyB3X2ltZ2lkb2ZmOworCisJYXFfbGlua3RpbWUgPSAobG9uZyAqKSAoYWJfaWhpICsgX0xJTktUSU1FKTsKKworCXJldHVybiBhcV9saW5rdGltZTsKK30gLyogdm1zX19nZXRfbGlua3RpbWUgKHZvaWQpICovCitleHRlcm4gdm9pZCB2bXNfX2N2dF92MnVfdGltZSAobG9uZyAqIGFxX3Ztc3RpbWUsIHRpbWVfdCAqIGFsX3VuaXh0aW1lKTsKKwkJCSAgICAvKiBpbnB1dAkJLCBvdXRwdXQgKi8KKyNlbmRpZiAvKiBfX1ZNUyAqLworCiAKIGNvbnN0IGNoYXIgKgogUHlfR2V0QnVpbGRJbmZvKHZvaWQpCiB7CiAJc3RhdGljIGNoYXIgYnVpbGRpbmZvWzUwXTsKKyNpZmRlZiBfX1ZNUworCXRpbWVfdCBsX3VuaXh0aW1lOworCisJdm1zX19jdnRfdjJ1X3RpbWUodm1zX19nZXRfbGlua3RpbWUgKCksICZsX3VuaXh0aW1lICk7CisKKwltZW1zZXQoYnVpbGRpbmZvLCAwLCA0MCk7CisJc3ByaW50ZihidWlsZGluZm8sICIjJWQsICUuMjRzIiwgQlVJTEQsIGN0aW1lICgmbF91bml4dGltZSkpOworI2Vsc2UKIAlQeU9TX3NucHJpbnRmKGJ1aWxkaW5mbywgc2l6ZW9mKGJ1aWxkaW5mbyksCiAJCSAgICAgICIjJWQsICUuMjBzLCAlLjlzIiwgQlVJTEQsIERBVEUsIFRJTUUpOworI2VuZGlmCiAJcmV0dXJuIGJ1aWxkaW5mbzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggMTg0MWM3NmIuLmVlOTcyNzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0cGF0aC5jCisrKyBiL01vZHVsZXMvZ2V0cGF0aC5jCkBAIC05Miw4ICs5MiwxMiBAQAogICovCiAKICNpZm5kZWYgVkVSU0lPTgorI2lmIGRlZmluZWQoX19WTVMpCisjZGVmaW5lIFZFUlNJT04gIjJfMSIKKyNlbHNlCiAjZGVmaW5lIFZFUlNJT04gIjIuMSIKICNlbmRpZgorI2VuZGlmCiAKICNpZm5kZWYgVlBBVEgKICNkZWZpbmUgVlBBVEggIi4iCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21haW4uYyBiL01vZHVsZXMvbWFpbi5jCmluZGV4IGQ0ODBmYmEuLjIwMDVmMGIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWFpbi5jCisrKyBiL01vZHVsZXMvbWFpbi5jCkBAIC00LDYgKzQsMTEgQEAKICNpbmNsdWRlICJvc2RlZnMuaCIKICNpbmNsdWRlICJjb21waWxlLmgiIC8qIEZvciBDT19GVVRVUkVfRElWSVNJT04gKi8KIAorI2lmZGVmIF9fVk1TCitleHRlcm4gaW50IFB5Vk1TX2luaXQoaW50KiBwdmlfYXJnYywgY2hhcioqKiBwdmlfYXJndik7CitleHRlcm4gUHlPYmplY3QqIHB5dm1zX2dyX2VtcHR5X3N0cmluZzsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjaW5jbHVkZSA8ZmNudGwuaD4KICNlbmRpZgpAQCAtOTgsNyArMTAzLDE4IEBACiAJCWZwcmludGYoZiwgdXNhZ2VfMyk7CiAJCWZwcmludGYoZiwgdXNhZ2VfNCwgREVMSU0sIERFTElNLCBQWVRIT05IT01FSEVMUCk7CiAJfQorI2lmIGRlZmluZWQoX19WTVMpCisJaWYgKGV4aXRjb2RlID09IDApIHsKKwkJLyogc3VwcHJlc3MgJ2Vycm9yJyBtZXNzYWdlICovCisJCWV4aXQoMSk7CisJfQorCWVsc2UgeworCQkvKiBTVFMkTV9JTkhJQl9NU0cgKyBTUyRfQUJPUlQgKi8KKwkJZXhpdCgweDEwMDAwMDJjKTsKKwl9CisjZWxzZQogCWV4aXQoZXhpdGNvZGUpOworI2VuZGlmCiAJLypOT1RSRUFDSEVEKi8KIH0KIApAQCAtMTQ1LDcgKzE2MSwxMiBAQAogCQlpZiAoKGZwID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IG9wZW4gZmlsZSAnJXMnXG4iLAogCQkJCWFyZ3ZbMF0sIGZpbGVuYW1lKTsKKyNpZiBkZWZpbmVkKF9fVk1TKQorCQkJLyogU1RTJE1fSU5ISUJfTVNHICsgU1MkX0FCT1JUICovCisJCQlleGl0KDB4MTAwMDAwMmMpOworI2Vsc2UKIAkJCWV4aXQoMik7CisjZW5kaWYKIAkJfQogCX0KIAkvKiBTa2lwIG9wdGlvbi1wcm9jZXNzaW5nIGlmIHdlIGFyZSBhbiBhcHBsZXQgKi8KQEAgLTMzOCwxNCArMzU5LDUwIEBACiAjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KIAkJLyogTGVhdmUgc3RkZXJyIGFsb25lIC0gaXQgc2hvdWxkIGJlIHVuYnVmZmVyZWQgYW55d2F5LiAqLwogICAJfQorI2lmZGVmIF9fVk1TCisJZWxzZSB7CisJCXNldHZidWYgKHN0ZG91dCwgKGNoYXIgKilOVUxMLCBfSU9MQkYsIEJVRlNJWik7CisJfQorI2VuZGlmIC8qIF9fVk1TICovCiAKIAlQeV9TZXRQcm9ncmFtTmFtZShhcmd2WzBdKTsKKyNpZmRlZiBfX1ZNUworCVB5Vk1TX2luaXQoJmFyZ2MsICZhcmd2KTsKKyNlbmRpZgogCVB5X0luaXRpYWxpemUoKTsKIAorI2lmZGVmIF9fVk1TCisJLyogY3JlYXRlIGFuIGVtcHR5IHN0cmluZyBvYmplY3QgKi8KKwlweXZtc19ncl9lbXB0eV9zdHJpbmcgPSBQeV9CdWlsZFZhbHVlKCJzIyIsIFB5X05vbmUsICh1bnNpZ25lZCBpbnQpMCk7CisjZW5kaWYKKwogCWlmIChQeV9WZXJib3NlRmxhZyB8fAogCSAgICAoY29tbWFuZCA9PSBOVUxMICYmIGZpbGVuYW1lID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpKQorI2lmbmRlZiBfX1ZNUwogCQlmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiIsCiAJCQlQeV9HZXRWZXJzaW9uKCksIFB5X0dldFBsYXRmb3JtKCksIENPUFlSSUdIVCk7CisjZWxzZQorCQlmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlcyBvbiAlcyAlcyAoJXNfZmxvYXQpXG4lc1xuIiwKKwkJCVB5X0dldFZlcnNpb24oKSwgUHlfR2V0UGxhdGZvcm0oKSwKKyMgIGlmZGVmIF9fQUxQSEEKKwkJCSJBbHBoYSIsCisjICBlbHNlCisJCQkiVkFYIiwKKyMgIGVuZGlmCisjICBpZiBfX0lFRUVfRkxPQVQKKwkJCSJUIiwKKyMgIGVsc2UKKyMgICAgaWYgX19EX0ZMT0FUCisJCQkiRCIsCisjICAgIGVsc2UKKyMgICAgICBpZiBfX0dfRkxPQVQKKwkJCSJHIiwKKyMgICAgICBlbmRpZiAvKiBfX0dfRkxPQVQgKi8KKyMgICAgZW5kaWYgLyogX19EX0ZMT0FUICovCisjICBlbmRpZiAvKiBfX0lFRUVfRkxPQVQgKi8KKwkJCUNPUFlSSUdIVCk7IC8qIDw8IEBAIGRlZmluZWQgYWJvdmUgaW4gdGhpcyBmaWxlICovCisvKgkJCVB5X0dldENvcHlyaWdodCgpKTsgKi8KKyNlbmRpZiAvKiBfX1ZNUyAqLwogCiAJaWYgKGNvbW1hbmQgIT0gTlVMTCkgewogCQkvKiBCYWNrdXAgX1B5T1Nfb3B0aW5kIGFuZCBmb3JjZSBzeXMuYXJndlswXSA9ICctYycgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwppbmRleCBmZDdmNjlmLi42MWZjMDJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCkBAIC0xNiw2ICsxNiwzMyBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdHNlcS5oIgogCisjaWYgZGVmaW5lZChfX1ZNUykKKyMgICAgaW5jbHVkZSA8Y3R5cGUuaD4JCQkvKiB0b2xvd2VyKCkgKi8KKyMgICAgaW5jbHVkZSA8ZGVzY3JpcC5oPgkJLyogc3RyaW5nIGRlc2NyaXB0b3JzICovCisjICAgIGluY2x1ZGUgPGR2aWRlZi5oPgkJCS8qIERWSSRfbmFtZSAqLworIyAgICBpbmNsdWRlIDxmaWxlLmg+CQkJLyogLT4gT19SRFdSICovCisjICAgIGluY2x1ZGUgPGpwaWRlZi5oPgkJCS8qIEpQSSRfbmFtZSAqLworIyAgICBpbmNsdWRlIDxsaWIkcm91dGluZXMuaD4JCS8qIExJQiRuYW1lICovCisjICAgIGluY2x1ZGUgPG90cyRyb3V0aW5lcy5oPgkJLyogT1RTJG5hbWUgKi8KKyMgICAgaW5jbHVkZSA8c3NkZWYuaD4JCQkvKiBTUyRfbmFtZSAqLworIyAgICBpbmNsdWRlIDx1bml4aW8uaD4KKyMgICAgaW5jbHVkZSA8dW5peGxpYi5oPgorIyAgICBpbmNsdWRlIDxzdGF0Lmg+CisvKiAtLS0tLSAqLworLyogREVDQyBvbiBBbHBoYSBkb2VzIHJlZGVmaW5lIHRoZXNlIGFscmVhZHkgKi8KKyMgICAgaWZuZGVmIHNoZWxsJGZyb21fdm1zCisjICAgICAgICBkZWZpbmUgc2hlbGwkZnJvbV92bXMoX3AxXyxfcDJfLF9wM18pIGRlY2MkZnJvbV92bXMoX3AxXyxfcDJfLF9wM18pCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiBzaGVsbCR0cmFuc2xhdGVfdm1zCisjICAgICAgICBkZWZpbmUgc2hlbGwkdHJhbnNsYXRlX3ZtcyhfcDFfKSBkZWNjJHRyYW5zbGF0ZV92bXMoX3AxXykKKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHNoZWxsJHRvX3ZtcworIyAgICAgICAgZGVmaW5lIHNoZWxsJHRvX3ZtcyhfcDFfLF9wMl8sX3AzXyxfcDRfLF9wNV8pIFwKKwkJZGVjYyR0b192bXMoX3AxXyxfcDJfLF9wM18sX3A0XyxfcDVfKQorIyAgICBlbmRpZgorIyAgICBpbmNsdWRlIDx3YWl0Lmg+CQkJLyogZGVmaW5lIHdhaXQoKSAqLworI2VuZGlmIC8qIGRlZmluZWQoX19WTVMpICovCisKIFB5RG9jX1NUUlZBUihwb3NpeF9fZG9jX18sCiAiVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb25hbGl0eSB0aGF0IGlzXG5cCiBzdGFuZGFyZGl6ZWQgYnkgdGhlIEMgU3RhbmRhcmQgYW5kIHRoZSBQT1NJWCBzdGFuZGFyZCAoYSB0aGlubHlcblwKQEAgLTk0LDggKzEyMSw4IEBACiAjZGVmaW5lIEhBVkVfU1lTVEVNCTEKICNkZWZpbmUgSEFWRV9DV0FJVAkxCiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0vKiBFdmVyeXRoaW5nIG5lZWRlZCBpcyBkZWZpbmVkIGluIFBDL29zMmVteC9weWNvbmZpZy5oICovCisjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgfHwgZGVmaW5lZChfX1ZNUykKKy8qIEV2ZXJ5dGhpbmcgbmVlZGVkIGlzIGRlZmluZWQgaW4gUEMvb3MyZW14L3B5Y29uZmlnLmggb3Igdm1zL3B5Y29uZmlnLmggKi8KICNlbHNlCQkJLyogYWxsIG90aGVyIGNvbXBpbGVycyAqLwogLyogVW5peCBmdW5jdGlvbnMgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IGNoZWNrIGZvciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQpAQCAtMzA0LDYgKzMzMSwxOTggQEAKIGV4dGVybiBjaGFyICoqZW52aXJvbjsKICNlbmRpZiAvKiAhX01TQ19WRVIgKi8KIAorI2lmIGRlZmluZWQoX19WTVMpCitzdGF0aWMgY2hhciBwc3htb2RfZ3RfcHN4cGF0aFsxMDI2XTsKKworc3RhdGljIGludCAKK3BzeG1vZF9mcm9tX3Ztc19hY3Rpb24gKGNoYXIgKnNwZWMpCit7CisJKHZvaWQpc3RyY3B5KHBzeG1vZF9ndF9wc3hwYXRoLCBzcGVjKTsKKwlyZXR1cm4gMTsKK30KKworLyogUmV0dXJuIGEgZGljdGlvbmFyeSBjb3JyZXNwb25kaW5nIHRvIHRoZSBWTVMgJ2Vudmlyb25tZW50IHRhYmxlJyAqLworc3RhdGljIGNoYXIqIGF0X2hvbWUgPSAiSE9NRSI7CitzdGF0aWMgY2hhciogYXRfcGF0aCA9ICJQQVRIIjsKKworc3RhdGljIGNoYXIgcHN4bW9kX3RfY29tbWFuZCBbXSA9ICJTWVMkQ09NTUFORCI7CisvKiBhZGQgc29tZSB2YWx1ZXMgdG8gcHJvdmlkZSBhIHNpbWlsYXIgZW52aXJvbm1lbnQgbGlrZSBQT1NJWCAqLwordm9pZAorcHNtbW9kX2FkZF9wb3NpeF9lbnYoUHlPYmplY3QgKmQpCit7CisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwlzdHJ1Y3QgZHNjJGRlc2NyaXB0b3JfcyByX2RldmljZV9uYW1lOworCWxvbmcgbF9kZXZidWZzaXo7CisJbG9uZyBsX3R0X3BhZ2U7CisJbG9uZyBsX2l0ZW1fY29kZTsKKwlsb25nIGxfc3RhdHVzOworCVB5T2JqZWN0ICpvOworCXN0cnVjdCBkc2MkZGVzY3JpcHRvcl9zIHJfcmVzdWx0YW50X3N0cmluZzsKKwljaGFyIHRfcmVzdWx0YW50X3N0cmluZ1sxM107IC8qIGVub3VnaCBzcGFjZSBmb3IgdXNlcm5hbWUgKDEyKSsgJ1wwJyAqLworCWNoYXIgKmF0X3Jlc3VsdGFudF9zdHJpbmc7CisJc2hvcnQgaW50IHdfcmVzdWx0YW50X2xlbmd0aDsKKworCS8qIHNldCB1cCBzdHJpbmcgZGVzY3JpcHRvciAqLworCXJfZGV2aWNlX25hbWUuZHNjJHdfbGVuZ3RoICA9IHN0cmxlbihwc3htb2RfdF9jb21tYW5kKTsKKwlyX2RldmljZV9uYW1lLmRzYyRiX2R0eXBlID0gRFNDJEtfRFRZUEVfVDsKKwlyX2RldmljZV9uYW1lLmRzYyRiX2NsYXNzID0gRFNDJEtfQ0xBU1NfUzsKKwlyX2RldmljZV9uYW1lLmRzYyRhX3BvaW50ZXIgPSAmcHN4bW9kX3RfY29tbWFuZFswXTsKKworCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJLyogQ09MVU1OUyA9ICRnZXRkdmkoIlNZUyRDT01NQU5EIiwiREVWQlVGU0laIikgKi8KKwlsX2l0ZW1fY29kZSA9IERWSSRfREVWQlVGU0laOwkKKwlsX3N0YXR1cyA9IGxpYiRnZXRkdmkoJmxfaXRlbV9jb2RlLAorCQkJICAgICAgMCwJCS8qIFtjaGFubmVsXQkgKi8KKwkJCSAgICAgICZyX2RldmljZV9uYW1lLAorCQkJICAgICAgJmxfZGV2YnVmc2l6LAkvKiBpbnRlZ2VyLXZhbHVlICovCisJCQkgICAgICAwLAkJLyogcmVzdWx0YW50X3N0cmluZyAqLworCQkJICAgICAgMCk7CQkvKiByZXN1bHRhbnRfbGVuZ3RoICovCisJaWYgKGxfc3RhdHVzID09IFNTJF9OT1JNQUwpIHsKKwkJLyogY3JlYXRlIGEgc3RyaW5nIG9iamVjdCBoZXJlIHRvIGNvbXBseSB3aXRoIFBPU0lYICovCisKKwkJLyogc2V0IHVwIHN0cmluZyBkZXNjcmlwdG9yICovCisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2Mkd19sZW5ndGggID0KKwkJICAgIChzaXplb2YodF9yZXN1bHRhbnRfc3RyaW5nKSAtIDEpOyAvKiBvbW1pdCAnXDAnIGF0IGVuZCAqLworCQlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGJfZHR5cGUgICA9IERTQyRLX0RUWVBFX1Q7CisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYl9jbGFzcyAgID0gRFNDJEtfQ0xBU1NfUzsKKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRhX3BvaW50ZXIgPSAmdF9yZXN1bHRhbnRfc3RyaW5nWzBdOworCisJCS8qIENvbnZlcnQgU2lnbmVkIEludGVnZXIgdG8gRGVjaW1hbCBUZXh0ICovCisJCWxfc3RhdHVzID0gb3RzJGN2dF9sX3RpKCZsX2RldmJ1ZnNpeiwgJnJfcmVzdWx0YW50X3N0cmluZywgMSwKKwkJCQkJNCwgMCk7CisJCWlmIChsX3N0YXR1cyA9PSBTUyRfTk9STUFMKSB7CisJCQkvKiB0ZXJtaW5hdGUgc3RyaW5nIGZvciAnQyctc3R5bGUgKi8KKwkJCXRfcmVzdWx0YW50X3N0cmluZ1tzaXplb2YodF9yZXN1bHRhbnRfc3RyaW5nKS0xXSA9ICdcMCc7CisJCQkvKiBzdHJpbmcgYXBwZWFycyBhczogJyAgICAgIHZhbHVlJyAtLSBza2lwICcgJyAqLworCQkJYXRfcmVzdWx0YW50X3N0cmluZyA9ICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF07CisJCQl3aGlsZSAoKCphdF9yZXN1bHRhbnRfc3RyaW5nID09ICcgJyApICYmIAorCQkgICAgICAgCSAgICAgICAoKmF0X3Jlc3VsdGFudF9zdHJpbmcgIT0gJ1wwJykpIHsKKwkJCQlhdF9yZXN1bHRhbnRfc3RyaW5nKys7CS8qIHNraXAgcHJlZml4IHNwYWNlcyAqLworCQkJfQorCisJCQlvID0gUHlfQnVpbGRWYWx1ZSgicyIsIGF0X3Jlc3VsdGFudF9zdHJpbmcpOworCQkJaWYgKG8gIT0gTlVMTCkgeworCQkJCSh2b2lkKSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ09MVU1OUyIsIG8pOworCQkJCVB5X0RFQ1JFRihvKTsKKwkJCX0KKwkJfSAvKiAobF9zdGF0dXMgPSBvdHMkY3Z0X2xfdGkoKSA9PSBTUyRfTk9STUFMKSAqLworCX0gLyogKGxfc3RhdHVzID0gbGliJGdldGR2aShEVkkkX0RFVkJVRlNJWikgPT0gU1MkX05PUk1BTCkgKi8KKwkvKiBMSU5FUyA9ICRnZXRkdmkoIlNZUyRDT01NQU5EIiwiVFRfUEFHRSIpICovCisJbF9pdGVtX2NvZGUgPSBEVkkkX1RUX1BBR0U7CisJbF9zdGF0dXMgPSBsaWIkZ2V0ZHZpKCZsX2l0ZW1fY29kZSwKKwkJCSAgICAgIDAsCQkvKiBbY2hhbm5lbF0JICovCisJCQkgICAgICAmcl9kZXZpY2VfbmFtZSwKKwkJICAgICAgICAgICAgICAmbF90dF9wYWdlLAkvKiBpbnRlZ2VyLXZhbHVlICovCisJCQkgICAgICAwLAkJLyogcmVzdWx0YW50X3N0cmluZyAqLworCQkJICAgICAgMCk7CQkvKiByZXN1bHRhbnRfbGVuZ3RoICovCisJaWYgKGxfc3RhdHVzID09IFNTJF9OT1JNQUwpIHsKKwkJLyogY3JlYXRlIGEgc3RyaW5nIG9iamVjdCBoZXJlIHRvIGNvbXBseSB3aXRoIFBPU0lYICovCisKKwkJLyogc2V0IHVwIHN0cmluZyBkZXNjcmlwdG9yICovCisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2Mkd19sZW5ndGggID0KKwkJICAgIChzaXplb2YodF9yZXN1bHRhbnRfc3RyaW5nKSAtIDEpOyAvKiBvbW1pdCAnXDAnIGF0IGVuZCAqLworCQlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGJfZHR5cGUgICA9IERTQyRLX0RUWVBFX1Q7CisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYl9jbGFzcyAgID0gRFNDJEtfQ0xBU1NfUzsKKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRhX3BvaW50ZXIgPSAmdF9yZXN1bHRhbnRfc3RyaW5nWzBdOworCisJCS8qIENvbnZlcnQgU2lnbmVkIEludGVnZXIgdG8gRGVjaW1hbCBUZXh0ICovCisJCWxfc3RhdHVzID0gb3RzJGN2dF9sX3RpKCZsX3R0X3BhZ2UsICZyX3Jlc3VsdGFudF9zdHJpbmcsCisJCQkJCTEsIDQsIDApOworCQlpZiAobF9zdGF0dXMgPT0gU1MkX05PUk1BTCkgeworCQkJLyogdGVybWluYXRlIHN0cmluZyBmb3IgJ0MnLXN0eWxlICovCisJCSAgICAJdF9yZXN1bHRhbnRfc3RyaW5nW3NpemVvZih0X3Jlc3VsdGFudF9zdHJpbmcpLTFdID0gJ1wwJzsKKwkJICAgIAkvKiBzdHJpbmcgYXBwZWFycyBhczogJyAgICAgIHZhbHVlJyAtLSBza2lwICcgJyAqLworCQkgICAgCWF0X3Jlc3VsdGFudF9zdHJpbmcgPSAmdF9yZXN1bHRhbnRfc3RyaW5nWzBdOworCQkgICAgCXdoaWxlICgoKmF0X3Jlc3VsdGFudF9zdHJpbmcgPT0gJyAnICkgJiYgCisJCQkgICAgICAgKCphdF9yZXN1bHRhbnRfc3RyaW5nICE9ICdcMCcpKSB7CisJCQkJYXRfcmVzdWx0YW50X3N0cmluZysrOyAvKiBza2lwIHByZWZpeCBzcGFjZXMgKi8KKwkJCX0KKworCQkgICAgCW8gPSBQeV9CdWlsZFZhbHVlKCJzIiwgYXRfcmVzdWx0YW50X3N0cmluZyk7CisJCSAgICAJaWYgKG8gIT0gTlVMTCkgeworCQkJCSh2b2lkKVB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJMSU5FUyIsIG8pOworCQkJCVB5X0RFQ1JFRihvKTsKKwkJCX0KKwkJfSAvKiAobF9zdGF0dXMgPSBvdHMkY3Z0X2xfdGkoKSA9PSBTUyRfTk9STUFMKSAqLworCX0gLyogKGxfc3RhdHVzID0gbGliJGdldGR2aShEVkkkX1RUX1BBR0UpID09IFNTJF9OT1JNQUwpICovCisJLyogZWxzZSAtLSBpZ25vcmUgZXJyb3IgKi8KKworCS8qIExPR05BTUUgPSAkZ2V0anBpKDAsIlVTRVJOQU1FIikgKi8KKwlsX2l0ZW1fY29kZSA9IEpQSSRfVVNFUk5BTUU7CisKKwkvKiBzZXQgdXAgc3RyaW5nIGRlc2NyaXB0b3IgKi8KKwlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJHdfbGVuZ3RoICA9CisJCSAgICAoc2l6ZW9mKHRfcmVzdWx0YW50X3N0cmluZykgLSAxKTsgLyogb21taXQgJ1wwJyBhdCBlbmQgKi8KKwlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGJfZHR5cGUgICA9IERTQyRLX0RUWVBFX1Q7CisJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRiX2NsYXNzICAgPSBEU0MkS19DTEFTU19TOworCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYV9wb2ludGVyID0gJnRfcmVzdWx0YW50X3N0cmluZ1swXTsKKworCWxfc3RhdHVzID0gbGliJGdldGpwaSgmbF9pdGVtX2NvZGUsIDAsIDAsIDAsCisJCQkgICAgICAmcl9yZXN1bHRhbnRfc3RyaW5nLCAmd19yZXN1bHRhbnRfbGVuZ3RoKTsKKwlpZiAobF9zdGF0dXMgPT0gU1MkX05PUk1BTCl7CisJCXRfcmVzdWx0YW50X3N0cmluZ1t3X3Jlc3VsdGFudF9sZW5ndGhdID0gJ1wwJzsKKworCQkvKiByZW1vdmUgYW55IHRyYWlsaW5nIHNwYWNlcyBieSByZXBsYWNpbmcgMXN0IG9uZSB3aXRoICdcMCcgKi8KKwkJYXRfcmVzdWx0YW50X3N0cmluZyA9ICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF07CisJCXdoaWxlICgoKmF0X3Jlc3VsdGFudF9zdHJpbmcgIT0gJyAnICkgJiYKKwkJICAgICAgICgqYXRfcmVzdWx0YW50X3N0cmluZyAhPSAnXDAnKSkgeworCQkJLyogbG93ZXJjYXNlIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUE9TSVggKi8KKwkJCSphdF9yZXN1bHRhbnRfc3RyaW5nID0gdG9sb3dlcigqYXRfcmVzdWx0YW50X3N0cmluZyk7CisJCQlhdF9yZXN1bHRhbnRfc3RyaW5nKys7CS8qIHNraXAgbm9uLWJsYW5rICovCisJCX0KKwkJKmF0X3Jlc3VsdGFudF9zdHJpbmcgPSAnXDAnOwkvKiB0ZXJtaW5hdGUgKi8KKworCQlvID0gUHlfQnVpbGRWYWx1ZSgicyIsICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF0pOworCQlpZiAobyAhPSBOVUxMKSB7CisJCQkodm9pZCkgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkxPR05BTUUiLCBvKTsKKwkJCSh2b2lkKSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVVNFUk5BTUUiLCBvKTsKKwkJCVB5X0RFQ1JFRihvKTsKKwkJfQorCX0gLyogKGxfc3RhdHVzID09IFNTJF9OT1JNQUwpICovCisKKwkvKiBPUyA9ICJPcGVuVk1TIiAqLworCW8gPSBQeVN0cmluZ19Gcm9tU3RyaW5nICgiT3BlblZNUyIpOworCWlmIChvICE9IE5VTEwpIHsKKwkJKHZvaWQpUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk9TIiwgbyk7CisJCVB5X0RFQ1JFRihvKTsKKwl9Cit9CisKKy8qIEBAIHBvc2l4IGVudjoKK0NPTFVNTlM9ODAJJCB3cml0ZSBzeXMkb3V0cHV0IGYkZ2V0ZHZpKCJTWVMkQ09NTUFORCIsIkRFVkJVRlNJWiIpCitMSU5FUz00NwkkIHdyaXRlIHN5cyRvdXRwdXQgZiRnZXRkdmkoIlNZUyRDT01NQU5EIiwiVFRfUEFHRSIpCitMT0dOQU1FPXplc3NpbgkkIHdyaXRlIHN5cyRvdXRwdXQgZiRlZGl0KGYkZ2V0anBpKDAsInVzZXJuYW1lIiksIC0KKwkJCSJjb2xsYXBzZSxsb3dlcmNhc2UiKQorT1M9T3BlblZNUworUFMxPUhFUkUgJAorCitUWj1DRVQtMTowMENFVCBEU1QsTTMuNS4wLzI6MDAsTTEwLjUuMC8zOjAwCisJCSQgd3JpdGUgc3lzJG91dHB1dCBmJHRybmxubSgiUE9TSVgkREVGQVVMVF9UWiIpCisJCQkiQ0VULTE6MDBDRVQgRFNULTI6MDAsTTMuNS4wLzI6MDAsTTEwLjUuMC8zOjAwIgorCQkkIHdyaXRlIHN5cyRvdXRwdXQgZiR0cm5sbm0oIlVDWCRUWiIpCisJCQkiTUVULTFNRVRfRFNULTIsTTMuNS4wLzIsTTEwLjUuMC8zIgorUEFHRVI9bW9yZQorVEVSTT12dDMwMF9zZXJpZXMKK1NIRUxMPS9iaW4vc2gKK0hPTUU9L2RrYTEwMC91c2VyL3plc3NpbgorXz0vYmluL2VudgorCis+Pj4gZm9yIHYgaW4gb3MuZW52aXJvbi5pdGVtcygpOgorLi4uICAgcHJpbnQgdgorLi4uCisoJ0hPTUUnLCAnL3VzZXJfaGVyZS96ZXNzaW4nKQorKCdDT0xVTU5TJywgJzgwJykKKygnTElORVMnLCAnMjQnKQorKCdQQVRIJywgJy9weXRob25fZGlzay9weXRob24vcHl0aG9uLTFfNV8yL3ZtcycpCisoJ09TJywgJ09wZW5WTVMnKQorKCdVU0VSJywgJ1pFU1NJTicpCisoJ0xPR05BTUUnLCAnemVzc2luJykKKygnVEVSTScsICd2dDMwMC04MCcpCisoJ1VTRVJOQU1FJywgJ3plc3NpbicpCis+Pj4KKyovCisjZW5kaWYgLyogX19WTVMgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGNvbnZlcnRlbnZpcm9uKHZvaWQpCiB7CkBAIC0zMzAsNyArNTQ5LDE5IEBACiAJCQlQeUVycl9DbGVhcigpOwogCQkJY29udGludWU7CiAJCX0KKyNpZiBkZWZpbmVkKF9fVk1TKQorCQlpZiAoKHN0cm5jbXAoYXRfaG9tZSwgKmUsIHNpemVvZihhdF9ob21lKSkgPT0gMCkgfHwKKwkJICAgIChzdHJuY21wKGF0X3BhdGgsICplLCBzaXplb2YoYXRfcGF0aCkpID09IDApKSB7CisJCQkodm9pZClzaGVsbCRmcm9tX3ZtcyhwKzEsIHBzeG1vZF9mcm9tX3Ztc19hY3Rpb24sIDApOworCQkJLyogMCA9IG5vIHdpbGRjYXJkIGV4cGFuc2lvbiAqLworCQkJdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocHN4bW9kX2d0X3BzeHBhdGgpOworCQl9CisJCWVsc2UgeworCQkJdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocCsxKTsKKwkJfQorI2Vsc2UKIAkJdiA9IFB5U3RyaW5nX0Zyb21TdHJpbmcocCsxKTsKKyNlbmRpZgogCQlpZiAodiA9PSBOVUxMKSB7CiAJCQlQeUVycl9DbGVhcigpOwogCQkJUHlfREVDUkVGKGspOwpAQCAtMzQzLDYgKzU3NCw5IEBACiAJCVB5X0RFQ1JFRihrKTsKIAkJUHlfREVDUkVGKHYpOwogCX0KKyNpZiBkZWZpbmVkKF9fVk1TKQorICAgICAgICBwc21tb2RfYWRkX3Bvc2l4X2VudihkKTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9fVk1TKSAqLwogI2lmIGRlZmluZWQoUFlPU19PUzIpCiAgICAgewogICAgICAgICBBUElSRVQgcmM7CkBAIC04OTUsNyArMTEyOSwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2RvX3N0YXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCAKIAkgICAgICBjaGFyICpmb3JtYXQsCisjaWZkZWYgX19WTVMKKwkgICAgICBpbnQgKCpzdGF0ZnVuYykoY29uc3QgY2hhciAqLCBTVFJVQ1RfU1RBVCAqLCAuLi4pLAorI2Vsc2UKIAkgICAgICBpbnQgKCpzdGF0ZnVuYykoY29uc3QgY2hhciAqLCBTVFJVQ1RfU1RBVCAqKSwKKyNlbmRpZgogCSAgICAgIGNoYXIgKndmb3JtYXQsCiAJICAgICAgaW50ICgqd3N0YXRmdW5jKShjb25zdCBQeV9VTklDT0RFICosIFNUUlVDVF9TVEFUICopKQogewpAQCAtMTA0OCw3ICsxMjg2LDE3IEBACiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnR0eW5hbWUiLCAmaWQpKQogCQlyZXR1cm4gTlVMTDsKIAorI2lmIGRlZmluZWQoX19WTVMpCisJLyogREVDQyBWNS4wIC0gb25seSBhYm91dCBGRD0gMCBAQCB0cnkgZ2V0bmFtZSgpKyRnZXRkdmkoZHZpJF9kZXZuYW0pICovCisJaWYgKGlkID09IDApIHsKKwkJcmV0ID0gdHR5bmFtZSgpOworCX0KKwllbHNlIHsKKwkJcmV0ID0gTlVMTDsKKwl9CisjZWxzZQogCXJldCA9IHR0eW5hbWUoaWQpOworI2VuZGlmCiAJaWYgKHJldCA9PSBOVUxMKQogCQlyZXR1cm4ocG9zaXhfZXJyb3IoKSk7CiAJcmV0dXJuKFB5U3RyaW5nX0Zyb21TdHJpbmcocmV0KSk7CkBAIC0xMDkyLDggKzEzNDAsMTMgQEAKICNlbGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCiAJcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgImV0OmNoZGlyIiwgX2NoZGlyMiwgTlVMTCwgTlVMTCk7CiAjZWxzZQorI2lmZGVmIF9fVk1TCisJcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgImV0OmNoZGlyIiwgKGludCAoKikoY29uc3QgY2hhciAqKSljaGRpciwgCisJCQkgIE5VTEwsIE5VTEwpOworI2Vsc2UKIAlyZXR1cm4gcG9zaXhfMXN0cihhcmdzLCAiZXQ6Y2hkaXIiLCBjaGRpciwgTlVMTCwgTlVMTCk7CiAjZW5kaWYKKyNlbmRpZgogfQogCiAjaWZkZWYgSEFWRV9GQ0hESVIKQEAgLTEyNDcsOCArMTUwMCwxMyBAQAogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCiAJcmVzID0gX2dldGN3ZDIoYnVmLCBzaXplb2YgYnVmKTsKICNlbHNlCisjaWYgZGVmaW5lZChfX1ZNUykKKwkvKiAwID0gZm9yY2UgVW5peC1zdHlsZSBwYXRoIGlmIGluIHRoZSBWTVMgRENMIGVudmlyb25tZW50ISAqLworCXJlcyA9IGdldGN3ZChidWYsIHNpemVvZiBidWYsIDApOworI2Vsc2UKIAlyZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKICNlbmRpZgorI2VuZGlmCiAJUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAlpZiAocmVzID09IE5VTEwpCiAJCXJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtNTExNSw3ICs1MzczLDExIEBACiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6cGlwZSIpKQogCQlyZXR1cm4gTlVMTDsKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWYgZGVmaW5lZChfX1ZNUykKKwlyZXMgPSBwaXBlKGZkcywwLDIxMDApOyAvKiBiaWdnZXIgbWFpbGJveCBxdW90YSB0aGFuIDUxMiAqLworI2Vsc2UKIAlyZXMgPSBwaXBlKGZkcyk7CisjZW5kaWYKIAlQeV9FTkRfQUxMT1dfVEhSRUFEUwogCWlmIChyZXMgIT0gMCkKIAkJcmV0dXJuIHBvc2l4X2Vycm9yKCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwppbmRleCA5MTM0ZWRjLi43ZTNjM2FlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKQEAgLTY3LDEwICs2NywxOCBAQAogI2RlZmluZSBTRVRTKGksdmFsKSBzZXRzKHYsIGksIHZhbCkKIAogCVNFVFMoc2V0SW5kZXgrKywgcC0+cHdfbmFtZSk7CisjaWZkZWYgX19WTVMKKwlTRVRTKHNldEluZGV4KyssICIiKTsKKyNlbHNlCiAJU0VUUyhzZXRJbmRleCsrLCBwLT5wd19wYXNzd2QpOworI2VuZGlmCiAJU0VUSShzZXRJbmRleCsrLCBwLT5wd191aWQpOwogCVNFVEkoc2V0SW5kZXgrKywgcC0+cHdfZ2lkKTsKKyNpZmRlZiBfX1ZNUworCVNFVFMoc2V0SW5kZXgrKywgIiIpOworI2Vsc2UKIAlTRVRTKHNldEluZGV4KyssIHAtPnB3X2dlY29zKTsKKyNlbmRpZgogCVNFVFMoc2V0SW5kZXgrKywgcC0+cHdfZGlyKTsKIAlTRVRTKHNldEluZGV4KyssIHAtPnB3X3NoZWxsKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKaW5kZXggMmFmYTY5Ny4uNzE2ODVjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCkBAIC0xNDgsNiArMTQ4LDE1IEBACiAjIGluY2x1ZGUgPGN0eXBlLmg+CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19WTVMpICYmICEgZGVmaW5lZChfU09DS0FERFJfTEVOKQorIyAgIGlmZGVmIGdldGFkZHJpbmZvCisjICAgICAgdW5kZWYgZ2V0YWRkcmluZm8KKyMgICBlbmRpZgorIyAgaW5jbHVkZSAiVENQSVBfSU9DVExfUk9VVElORSIKKyNlbHNlCisjICBpbmNsdWRlIDxpb2N0bC5oPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKFBZT1NfT1MyKQogIyBkZWZpbmUgIElOQ0xfRE9TCiAjIGRlZmluZSAgSU5DTF9ET1NFUlJPUlMKQEAgLTI3MCw2ICsyNzksMTEgQEAKICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2UKICNlbmRpZgogCisjaWZkZWYgX19WTVMKKy8qIFRDUC9JUCBTZXJ2aWNlcyBmb3IgVk1TIHVzZXMgYSBtYXhpbXVtIHNlbmQvcmV2YyBidWZmZXIgbGVuZ3RoIG9mIDY1NTM1ICovCisjZGVmaW5lIFNFR01FTlRfU0laRSA2NTUzNQorI2VuZGlmCisKIC8qIFhYWCBUaGVyZSdzIGEgcHJvYmxlbSBoZXJlOiAqc3RhdGljKiBmdW5jdGlvbnMgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlCiAgICBhIFB5IHByZWZpeCAob3IgdXNlIENhcGl0YWxpemVkV29yZHMpLiAgTGF0ZXIuLi4gKi8KIApAQCAtNDg1LDcgKzQ5OSwxMCBAQAogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQogCWJsb2NrID0gIWJsb2NrOwogCWlvY3RsKHMtPnNvY2tfZmQsIEZJT05CSU8sIChjYWRkcl90KSZibG9jaywgc2l6ZW9mKGJsb2NrKSk7Ci0jZWxzZSAvKiAhUFlPU19PUzIgKi8KKyNlbGlmIGRlZmluZWQoX19WTVMpCisJYmxvY2sgPSAhYmxvY2s7CisJaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNoYXIgKikmYmxvY2spOworI2Vsc2UgIC8qICFQWU9TX09TMiAmJiAhX1ZNUyAqLwogCWRlbGF5X2ZsYWcgPSBmY250bChzLT5zb2NrX2ZkLCBGX0dFVEZMLCAwKTsKIAlpZiAoYmxvY2spCiAJCWRlbGF5X2ZsYWcgJj0gKH5PX05PTkJMT0NLKTsKQEAgLTEyMjMsNyArMTI0MCwxMSBAQAogCQkJcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOwogCQlyZXR1cm4gUHlJbnRfRnJvbUxvbmcoZmxhZyk7CiAJfQorI2lmZGVmIF9fVk1TCisJaWYgKGJ1ZmxlbiA+IDEwMjQpIHsKKyNlbHNlCiAJaWYgKGJ1ZmxlbiA8PSAwIHx8IGJ1ZmxlbiA+IDEwMjQpIHsKKyNlbmRpZgogCQlQeUVycl9TZXRTdHJpbmcoc29ja2V0X2Vycm9yLAogCQkJCSJnZXRzb2Nrb3B0IGJ1ZmxlbiBvdXQgb2YgcmFuZ2UiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNTYwLDkgKzE1ODEsMjMgQEAKICNlbmRpZgogCUZJTEUgKmZwOwogCVB5T2JqZWN0ICpmOworI2lmZGVmIF9fVk1TCisJY2hhciAqbW9kZV9yID0gInIiOworCWNoYXIgKm1vZGVfdyA9ICJ3IjsKKyNlbmRpZgogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c2k6bWFrZWZpbGUiLCAmbW9kZSwgJmJ1ZnNpemUpKQogCQlyZXR1cm4gTlVMTDsKKyNpZmRlZiBfX1ZNUworCWlmIChzdHJjbXAobW9kZSwicmIiKSA9PSAwKSB7CisJICAgIG1vZGUgPSBtb2RlX3I7CisJfQorCWVsc2UgeworCQlpZiAoc3RyY21wKG1vZGUsIndiIikgPT0gMCkgeworCQkJbW9kZSA9IG1vZGVfdzsKKwkJfQorCX0KKyNlbmRpZgogI2lmZGVmIE1TX1dJTjMyCiAJaWYgKCgoZmQgPSBfb3Blbl9vc2ZoYW5kbGUocy0+c29ja19mZCwgX09fQklOQVJZKSkgPCAwKSB8fAogCSAgICAoKGZkID0gZHVwKGZkKSkgPCAwKSB8fCAoKGZwID0gZmRvcGVuKGZkLCBtb2RlKSkgPT0gTlVMTCkpCkBAIC0xNjAxLDYgKzE2MzYsMTAgQEAKIHsKIAlpbnQgbGVuLCBuLCBmbGFncyA9IDA7CiAJUHlPYmplY3QgKmJ1ZjsKKyNpZmRlZiBfX1ZNUworCWludCByZWFkX2xlbmd0aDsKKwljaGFyICpyZWFkX2J1ZjsKKyNlbmRpZgogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpfGk6cmVjdiIsICZsZW4sICZmbGFncykpCiAJCXJldHVybiBOVUxMOwpAQCAtMTYxNSw2ICsxNjU0LDcgQEAKIAlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCisjaWZuZGVmIF9fVk1TCiAJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogCWludGVybmFsX3NlbGVjdChzLCAwKTsKIAluID0gcmVjdihzLT5zb2NrX2ZkLCBQeVN0cmluZ19BU19TVFJJTkcoYnVmKSwgbGVuLCBmbGFncyk7CkBAIC0xNjI2LDYgKzE2NjYsNDIgQEAKIAl9CiAJaWYgKG4gIT0gbGVuKQogCQlfUHlTdHJpbmdfUmVzaXplKCZidWYsIG4pOworI2Vsc2UKKwlyZWFkX2J1ZiA9IFB5U3RyaW5nX0FzU3RyaW5nKGJ1Zik7CisJcmVhZF9sZW5ndGggPSBsZW47CisJd2hpbGUgKHJlYWRfbGVuZ3RoICE9IDApIHsKKwkJdW5zaWduZWQgaW50IHNlZ21lbnQ7CisKKwkJc2VnbWVudCA9IHJlYWRfbGVuZ3RoIC9TRUdNRU5UX1NJWkU7CisJCWlmIChzZWdtZW50ICE9IDApIHsKKwkJCXNlZ21lbnQgPSBTRUdNRU5UX1NJWkU7CisJCX0KKwkJZWxzZSB7CisJCQlzZWdtZW50ID0gcmVhZF9sZW5ndGg7CisJCX0KKworCQlQeV9CRUdJTl9BTExPV19USFJFQURTCisgCSAgCWludGVybmFsX3NlbGVjdChzLCAwKTsKKwkJbiA9IHJlY3Yocy0+c29ja19mZCwgcmVhZF9idWYsIHNlZ21lbnQsIGZsYWdzKTsKKwkJUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworCQlpZiAobiA8IDApIHsKKwkJCVB5X0RFQ1JFRihidWYpOworCQkJcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOworCQl9CisJCWlmIChuICE9IHJlYWRfbGVuZ3RoKSB7CisJCQlyZWFkX2J1ZiArPSBuOworCQkJYnJlYWs7CisJCX0KKworCQlyZWFkX2xlbmd0aCAtPSBzZWdtZW50OworCQlyZWFkX2J1ZiArPSBzZWdtZW50OworCX0KKwlpZiAoX1B5U3RyaW5nX1Jlc2l6ZSgmYnVmLCAocmVhZF9idWYgLSBQeVN0cmluZ19Bc1N0cmluZyhidWYpKSkgPCAwKQorCXsKKwkgICAgcmV0dXJuIE5VTEw7CisJfQorI2VuZGlmIC8qICFfX1ZNUyAqLwogCXJldHVybiBidWY7CiB9CiAKQEAgLTE3MDcsMTAgKzE3ODMsMTQgQEAKIHsKIAljaGFyICpidWY7CiAJaW50IGxlbiwgbiwgZmxhZ3MgPSAwOworI2lmZGVmIF9fVk1TCisJaW50IHNlbmRfbGVuZ3RoOworI2VuZGlmCiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfGk6c2VuZCIsICZidWYsICZsZW4sICZmbGFncykpCiAJCXJldHVybiBOVUxMOwogCisjaWZuZGVmIF9fVk1TCiAJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogCWludGVybmFsX3NlbGVjdChzLCAxKTsKIAluID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwpAQCAtMTcxOCw2ICsxNzk4LDMxIEBACiAKIAlpZiAobiA8IDApCiAJCXJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKKyNlbHNlCisJLyogRGl2aWRlIHBhY2tldCBpbnRvIHNtYWxsZXIgc2VnbWVudHMgZm9yCSovCisJLyogIFRDUC9JUCBTZXJ2aWNlcyBmb3IgT3BlblZNUwkJCSovCisJc2VuZF9sZW5ndGggPSBsZW47CisJd2hpbGUgKHNlbmRfbGVuZ3RoICE9IDApIHsKKwkJdW5zaWduZWQgaW50IHNlZ21lbnQ7CisKKwkJc2VnbWVudCA9IHNlbmRfbGVuZ3RoIC8gU0VHTUVOVF9TSVpFOworCQlpZiAoc2VnbWVudCAhPSAwKSB7CisJCQlzZWdtZW50ID0gU0VHTUVOVF9TSVpFOworCQl9CisJCWVsc2UgeworCQkJc2VnbWVudCA9IHNlbmRfbGVuZ3RoOworCQl9CisJCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKwkJaW50ZXJuYWxfc2VsZWN0KHMsIDEpOworCQluID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIHNlZ21lbnQsIGZsYWdzKTsKKwkJUHlfRU5EX0FMTE9XX1RIUkVBRFMKKwkJaWYgKG4gPCAwKSB7CisJCQlyZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CisJCX0KKwkJc2VuZF9sZW5ndGggLT0gc2VnbWVudDsKKwkJYnVmICs9IHNlZ21lbnQ7CisJfSAvKiBlbmQgd2hpbGUgKi8KKyNlbmRpZiAvKiAhX19WTVMgKi8KIAlyZXR1cm4gUHlJbnRfRnJvbUxvbmcoKGxvbmcpbik7CiB9CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMgYi9PYmplY3RzL3N0cmluZ29iamVjdC5jCmluZGV4IGMyMzRiMDQuLjNhNjlhYTkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zdHJpbmdvYmplY3QuYwpAQCAtNzY1LDcgKzc2NSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAlpZiAoZmxhZ3MgJiBQeV9QUklOVF9SQVcpIHsKLQkJZndyaXRlKG9wLT5vYl9zdmFsLCAxLCAoaW50KSBvcC0+b2Jfc2l6ZSwgZnApOworI2lmZGVmIF9fVk1TCisgICAgICAgICAgICAgICAgaWYgKG9wLT5vYl9zaXplKSBmd3JpdGUob3AtPm9iX3N2YWwsIChpbnQpIG9wLT5vYl9zaXplLCAxLCBmcCk7CisjZWxzZQorICAgICAgICAgICAgICAgIGZ3cml0ZShvcC0+b2Jfc3ZhbCwgMSwgKGludCkgb3AtPm9iX3NpemUsIGZwKTsKKyNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9leGNlcHRpb25zLmMgYi9QeXRob24vZXhjZXB0aW9ucy5jCmluZGV4IDAxNWQ0NWEuLjE2YjY3MzggMTAwNjQ0Ci0tLSBhL1B5dGhvbi9leGNlcHRpb25zLmMKKysrIGIvUHl0aG9uL2V4Y2VwdGlvbnMuYwpAQCAtNjcsNiArNjcsNyBAQAogIHwgICAgfCAgICArLS0gT1NFcnJvclxuXAogIHwgICAgfCAgICAgICAgIHxcblwKICB8ICAgIHwgICAgICAgICArLS0gV2luZG93c0Vycm9yXG5cCisgfCAgICB8ICAgICAgICAgKy0tIFZNU0Vycm9yXG5cCiAgfCAgICB8XG5cCiAgfCAgICArLS0gRU9GRXJyb3JcblwKICB8ICAgICstLSBSdW50aW1lRXJyb3JcblwKQEAgLTY0Myw2ICs2NDQsMTEgQEAKIFB5RG9jX1NUUlZBUihXaW5kb3dzRXJyb3JfX2RvY19fLCAiTVMtV2luZG93cyBPUyBzeXN0ZW0gY2FsbCBmYWlsZWQuIik7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCisjaWZkZWYgX19WTVMKK3N0YXRpYyBjaGFyCitWTVNFcnJvcl9fZG9jX19bXSA9ICJPcGVuVk1TIE9TIHN5c3RlbSBjYWxsIGZhaWxlZC4iOworI2VuZGlmCisKIFB5RG9jX1NUUlZBUihFT0ZFcnJvcl9fZG9jX18sICJSZWFkIGJleW9uZCBlbmQgb2YgZmlsZS4iKTsKIAogUHlEb2NfU1RSVkFSKFJ1bnRpbWVFcnJvcl9fZG9jX18sICJVbnNwZWNpZmllZCBydW4tdGltZSBlcnJvci4iKTsKQEAgLTE1OTksNiArMTYwNSw5IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKlB5RXhjX1dpbmRvd3NFcnJvcjsKICNlbmRpZgorI2lmZGVmIF9fVk1TCitQeU9iamVjdCAqUHlFeGNfVk1TRXJyb3I7CisjZW5kaWYKIAogLyogUHJlLWNvbXB1dGVkIE1lbW9yeUVycm9yIGluc3RhbmNlLiAgQmVzdCB0byBjcmVhdGUgdGhpcyBhcyBlYXJseSBhcwogICogcG9zc2libHkgYW5kIG5vdCB3YWl0IHVudGlsIGEgTWVtb3J5RXJyb3IgaXMgYWN0dWFsbHkgcmFpc2VkIQpAQCAtMTY1MCw2ICsxNjU5LDEwIEBACiAgeyJXaW5kb3dzRXJyb3IiLCAmUHlFeGNfV2luZG93c0Vycm9yLCAmUHlFeGNfT1NFcnJvciwKICAgV2luZG93c0Vycm9yX19kb2NfX30sCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLworI2lmZGVmIF9fVk1TCisgeyJWTVNFcnJvciIsICZQeUV4Y19WTVNFcnJvciwgJlB5RXhjX09TRXJyb3IsCisgIFZNU0Vycm9yX19kb2NfX30sCisjZW5kaWYKICB7IkVPRkVycm9yIiwgICAgICZQeUV4Y19FT0ZFcnJvciwgICAgIDAsIEVPRkVycm9yX19kb2NfX30sCiAgeyJSdW50aW1lRXJyb3IiLCAmUHlFeGNfUnVudGltZUVycm9yLCAwLCBSdW50aW1lRXJyb3JfX2RvY19ffSwKICB7Ik5vdEltcGxlbWVudGVkRXJyb3IiLCAmUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnQuYyBiL1B5dGhvbi9pbXBvcnQuYwppbmRleCA0ZDBjZGJiLi5kOTIxZDc0IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0LmMKKysrIGIvUHl0aG9uL2ltcG9ydC5jCkBAIC02OTMsOCArNjkzLDExIEBACiAjaWZkZWYgT19CSU5BUlkKIAkJCQl8T19CSU5BUlkgICAvKiBuZWNlc3NhcnkgZm9yIFdpbmRvd3MgKi8KICNlbmRpZgotCi0JCQksIDA2NjYpOworI2lmZGVmIF9fVk1TCisgICAgICAgICAgICAgICAgICAgICAgICAsIDA2NjYsICJjdHh0PWJpbiIsICJzaHI9bmlsIik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgLCAwNjY2KTsKKyNlbmRpZgogCWlmIChmZCA8IDApCiAJCXJldHVybiBOVUxMOwogCXJldHVybiBmZG9wZW4oZmQsICJ3YiIpOwo=