ZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHllcnJvcnMuaCBiL0luY2x1ZGUvcHllcnJvcnMuaAppbmRleCA4Njg1ODQ5Li4xYWRjNmVjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZXJyb3JzLmgKKysrIGIvSW5jbHVkZS9weWVycm9ycy5oCkBAIC02Miw2ICs2Miw5IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19XaW5kb3dzRXJyb3I7CiAjZW5kaWYKKyNpZmRlZiBfX1ZNUworZXh0ZXJuIERMX0lNUE9SVChQeU9iamVjdCAqKSBQeUV4Y19WTVNFcnJvcjsKKyNlbmRpZgogCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX01lbW9yeUVycm9ySW5zdDsKIApkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDI4MWFlYjIuLjNlZjRkOGEgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTQwNSw2ICs0MDUsNyBAQAogQWRyaWFuIFBoaWxsaXBzCiBDaHJpc3RvcGhlciBKLiBQaG9lbml4CiBOZWFsZSBQaWNrZXR0CitKZWFuLUZyYW7nb2lzIFBp6XJvbm5lCiBEYW4gUGllcnNvbgogTWFydGlqbiBQaWV0ZXJzCiBGcmFu529pcyBQaW5hcmQKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA5MWZlMDQ5Li4wZTg4M2JiIDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC04MjYsNiArODI2LDggQEAKIE5ldyBwbGF0Zm9ybXMKIC0tLS0tLS0tLS0tLS0KIAorLSBPcGVuVk1TIGlzIG5vdyBzdXBwb3J0ZWQuCisKIC0gQXRoZU9TIGlzIG5vdyBzdXBwb3J0ZWQuCiAKIC0gdGhlIEVNWCBydW50aW1lIGVudmlyb25tZW50IG9uIE9TLzIgaXMgbm93IHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hvdHNob3QuYyBiL01vZHVsZXMvX2hvdHNob3QuYwppbmRleCAzNzg3OWI5Li41MzEzMGQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19ob3RzaG90LmMKKysrIGIvTW9kdWxlcy9faG90c2hvdC5jCkBAIC05NDcsNyArOTQ3LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChtYWNpbnRvc2gpIHx8IGRlZmluZWQoUFlPU19PUzIpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKG1hY2ludG9zaCkgfHwgZGVmaW5lZChQWU9TX09TMikgfHwgXAorICAgIGRlZmluZWQoX19WTVMpCiAgICAgcnVzYWdlX2RpZmYgPSAtMTsKICNlbHNlCiAgICAgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRidWlsZGluZm8uYyBiL01vZHVsZXMvZ2V0YnVpbGRpbmZvLmMKaW5kZXggYjU5ZDlhNy4uMjNiNTdjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRidWlsZGluZm8uYworKysgYi9Nb2R1bGVzL2dldGJ1aWxkaW5mby5jCkBAIC0yOCwxMiArMjgsNzAgQEAKICNkZWZpbmUgQlVJTEQgMAogI2VuZGlmCiAKKyNpZmRlZiBfX1ZNUworIyAgaWZkZWYgX19ERUNDCisjICAgIHByYWdtYSBleHRlcm5fbW9kZWwgc2F2ZQorIyAgICBwcmFnbWEgZXh0ZXJuX21vZGVsIHN0cmljdF9yZWZkZWYKK2V4dGVybiBsb25nIGN0bCRnbF9pbWdoZHJiZjsKKyMgICAgcHJhZ21hIGV4dGVybl9tb2RlbCByZXN0b3JlCisjICBlbmRpZgorCisjICBpZmRlZiBfX0FMUEhBCisjICAgIGRlZmluZSBFSUhEJExfSU1HSURPRkYgMjQKKyMgICAgZGVmaW5lIEVJSEkkUV9MSU5LVElNRSAgOAorIyAgICBkZWZpbmUgX0lNR0lET0ZGIEVJSEQkTF9JTUdJRE9GRgorIyAgICBkZWZpbmUgX0xJTktUSU1FIEVJSEkkUV9MSU5LVElNRQorIyAgZWxzZQorIyAgICBkZWZpbmUgSUhEJFdfSU1HSURPRkYgIDYKKyMgICAgZGVmaW5lIElISSRRX0xJTktUSU1FIDU2CisjICAgIGRlZmluZSBfSU1HSURPRkYgSUhEJFdfSU1HSURPRkYKKyMgICAgZGVmaW5lIF9MSU5LVElNRSBJSEkkUV9MSU5LVElNRQorIyAgZW5kaWYgLyogX19WTVMgKi8KKworbG9uZyoKK3Ztc19fZ2V0X2xpbmt0aW1lICh2b2lkKQoreworCWxvbmcqIGFsX2ltZ2hkcmJmOworCXVuc2lnbmVkIHNob3J0KiBhd19pbWdpZG9mZjsKKwl1bnNpZ25lZCBzaG9ydAkgIHdfaW1naWRvZmY7CisJbG9uZyogYXFfbGlua3RpbWU7CisJdW5zaWduZWQgY2hhciogYWJfaWhpOworCisJYWxfaW1naGRyYmYgPSAmY3RsJGdsX2ltZ2hkcmJmOworCisJYWxfaW1naGRyYmYgPSAobG9uZyAqKSphbF9pbWdoZHJiZjsKKwlhbF9pbWdoZHJiZiA9IChsb25nICopKmFsX2ltZ2hkcmJmOworCisJYXdfaW1naWRvZmYgPSAodW5zaWduZWQgc2hvcnQgKikKKwkJKCh1bnNpZ25lZCBjaGFyICopYWxfaW1naGRyYmYgKyBfSU1HSURPRkYpOworCisJd19pbWdpZG9mZiA9ICphd19pbWdpZG9mZjsKKworCWFiX2loaSA9ICh1bnNpZ25lZCBjaGFyICopYWxfaW1naGRyYmYgKyB3X2ltZ2lkb2ZmOworCisJYXFfbGlua3RpbWUgPSAobG9uZyAqKSAoYWJfaWhpICsgX0xJTktUSU1FKTsKKworCXJldHVybiBhcV9saW5rdGltZTsKK30gLyogdm1zX19nZXRfbGlua3RpbWUgKHZvaWQpICovCitleHRlcm4gdm9pZCB2bXNfX2N2dF92MnVfdGltZSAobG9uZyAqIGFxX3Ztc3RpbWUsIHRpbWVfdCAqIGFsX3VuaXh0aW1lKTsKKwkJCSAgICAvKiBpbnB1dAkJLCBvdXRwdXQgKi8KKyNlbmRpZiAvKiBfX1ZNUyAqLworCiAKIGNvbnN0IGNoYXIgKgogUHlfR2V0QnVpbGRJbmZvKHZvaWQpCiB7CiAJc3RhdGljIGNoYXIgYnVpbGRpbmZvWzUwXTsKKyNpZmRlZiBfX1ZNUworCXRpbWVfdCBsX3VuaXh0aW1lOworCisJdm1zX19jdnRfdjJ1X3RpbWUodm1zX19nZXRfbGlua3RpbWUgKCksICZsX3VuaXh0aW1lICk7CisKKwltZW1zZXQoYnVpbGRpbmZvLCAwLCA0MCk7CisJc3ByaW50ZihidWlsZGluZm8sICIjJWQsICUuMjRzIiwgQlVJTEQsIGN0aW1lICgmbF91bml4dGltZSkpOworI2Vsc2UKIAlQeU9TX3NucHJpbnRmKGJ1aWxkaW5mbywgc2l6ZW9mKGJ1aWxkaW5mbyksCiAJCSAgICAgICIjJWQsICUuMjBzLCAlLjlzIiwgQlVJTEQsIERBVEUsIFRJTUUpOworI2VuZGlmCiAJcmV0dXJuIGJ1aWxkaW5mbzsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggMTg0MWM3Ni4uZWU5NzI3MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRwYXRoLmMKKysrIGIvTW9kdWxlcy9nZXRwYXRoLmMKQEAgLTkyLDggKzkyLDEyIEBACiAgKi8KIAogI2lmbmRlZiBWRVJTSU9OCisjaWYgZGVmaW5lZChfX1ZNUykKKyNkZWZpbmUgVkVSU0lPTiAiMl8xIgorI2Vsc2UKICNkZWZpbmUgVkVSU0lPTiAiMi4xIgogI2VuZGlmCisjZW5kaWYKIAogI2lmbmRlZiBWUEFUSAogI2RlZmluZSBWUEFUSCAiLiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggZDQ4MGZiYS4uMjAwNWYwYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTQsNiArNCwxMSBAQAogI2luY2x1ZGUgIm9zZGVmcy5oIgogI2luY2x1ZGUgImNvbXBpbGUuaCIgLyogRm9yIENPX0ZVVFVSRV9ESVZJU0lPTiAqLwogCisjaWZkZWYgX19WTVMKK2V4dGVybiBpbnQgUHlWTVNfaW5pdChpbnQqIHB2aV9hcmdjLCBjaGFyKioqIHB2aV9hcmd2KTsKK2V4dGVybiBQeU9iamVjdCogcHl2bXNfZ3JfZW1wdHlfc3RyaW5nOworI2VuZGlmCisKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19DWUdXSU5fXykKICNpbmNsdWRlIDxmY250bC5oPgogI2VuZGlmCkBAIC05OCw3ICsxMDMsMTggQEAKIAkJZnByaW50ZihmLCB1c2FnZV8zKTsKIAkJZnByaW50ZihmLCB1c2FnZV80LCBERUxJTSwgREVMSU0sIFBZVEhPTkhPTUVIRUxQKTsKIAl9CisjaWYgZGVmaW5lZChfX1ZNUykKKwlpZiAoZXhpdGNvZGUgPT0gMCkgeworCQkvKiBzdXBwcmVzcyAnZXJyb3InIG1lc3NhZ2UgKi8KKwkJZXhpdCgxKTsKKwl9CisJZWxzZSB7CisJCS8qIFNUUyRNX0lOSElCX01TRyArIFNTJF9BQk9SVCAqLworCQlleGl0KDB4MTAwMDAwMmMpOworCX0KKyNlbHNlCiAJZXhpdChleGl0Y29kZSk7CisjZW5kaWYKIAkvKk5PVFJFQUNIRUQqLwogfQogCkBAIC0xNDUsNyArMTYxLDEyIEBACiAJCWlmICgoZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKSkgPT0gTlVMTCkgewogCQkJZnByaW50ZihzdGRlcnIsICIlczogY2FuJ3Qgb3BlbiBmaWxlICclcydcbiIsCiAJCQkJYXJndlswXSwgZmlsZW5hbWUpOworI2lmIGRlZmluZWQoX19WTVMpCisJCQkvKiBTVFMkTV9JTkhJQl9NU0cgKyBTUyRfQUJPUlQgKi8KKwkJCWV4aXQoMHgxMDAwMDAyYyk7CisjZWxzZQogCQkJZXhpdCgyKTsKKyNlbmRpZgogCQl9CiAJfQogCS8qIFNraXAgb3B0aW9uLXByb2Nlc3NpbmcgaWYgd2UgYXJlIGFuIGFwcGxldCAqLwpAQCAtMzM4LDE0ICszNTksNTAgQEAKICNlbmRpZiAvKiAhTVNfV0lORE9XUyAqLwogCQkvKiBMZWF2ZSBzdGRlcnIgYWxvbmUgLSBpdCBzaG91bGQgYmUgdW5idWZmZXJlZCBhbnl3YXkuICovCiAgIAl9CisjaWZkZWYgX19WTVMKKwllbHNlIHsKKwkJc2V0dmJ1ZiAoc3Rkb3V0LCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgQlVGU0laKTsKKwl9CisjZW5kaWYgLyogX19WTVMgKi8KIAogCVB5X1NldFByb2dyYW1OYW1lKGFyZ3ZbMF0pOworI2lmZGVmIF9fVk1TCisJUHlWTVNfaW5pdCgmYXJnYywgJmFyZ3YpOworI2VuZGlmCiAJUHlfSW5pdGlhbGl6ZSgpOwogCisjaWZkZWYgX19WTVMKKwkvKiBjcmVhdGUgYW4gZW1wdHkgc3RyaW5nIG9iamVjdCAqLworCXB5dm1zX2dyX2VtcHR5X3N0cmluZyA9IFB5X0J1aWxkVmFsdWUoInMjIiwgUHlfTm9uZSwgKHVuc2lnbmVkIGludCkwKTsKKyNlbmRpZgorCiAJaWYgKFB5X1ZlcmJvc2VGbGFnIHx8CiAJICAgIChjb21tYW5kID09IE5VTEwgJiYgZmlsZW5hbWUgPT0gTlVMTCAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSkpCisjaWZuZGVmIF9fVk1TCiAJCWZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzIG9uICVzXG4lc1xuIiwKIAkJCVB5X0dldFZlcnNpb24oKSwgUHlfR2V0UGxhdGZvcm0oKSwgQ09QWVJJR0hUKTsKKyNlbHNlCisJCWZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzIG9uICVzICVzICglc19mbG9hdClcbiVzXG4iLAorCQkJUHlfR2V0VmVyc2lvbigpLCBQeV9HZXRQbGF0Zm9ybSgpLAorIyAgaWZkZWYgX19BTFBIQQorCQkJIkFscGhhIiwKKyMgIGVsc2UKKwkJCSJWQVgiLAorIyAgZW5kaWYKKyMgIGlmIF9fSUVFRV9GTE9BVAorCQkJIlQiLAorIyAgZWxzZQorIyAgICBpZiBfX0RfRkxPQVQKKwkJCSJEIiwKKyMgICAgZWxzZQorIyAgICAgIGlmIF9fR19GTE9BVAorCQkJIkciLAorIyAgICAgIGVuZGlmIC8qIF9fR19GTE9BVCAqLworIyAgICBlbmRpZiAvKiBfX0RfRkxPQVQgKi8KKyMgIGVuZGlmIC8qIF9fSUVFRV9GTE9BVCAqLworCQkJQ09QWVJJR0hUKTsgLyogPDwgQEAgZGVmaW5lZCBhYm92ZSBpbiB0aGlzIGZpbGUgKi8KKy8qCQkJUHlfR2V0Q29weXJpZ2h0KCkpOyAqLworI2VuZGlmIC8qIF9fVk1TICovCiAKIAlpZiAoY29tbWFuZCAhPSBOVUxMKSB7CiAJCS8qIEJhY2t1cCBfUHlPU19vcHRpbmQgYW5kIGZvcmNlIHN5cy5hcmd2WzBdID0gJy1jJyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCmluZGV4IGZkN2Y2OWYuLjYxZmMwMmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKQEAgLTE2LDYgKzE2LDMzIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0c2VxLmgiCiAKKyNpZiBkZWZpbmVkKF9fVk1TKQorIyAgICBpbmNsdWRlIDxjdHlwZS5oPgkJCS8qIHRvbG93ZXIoKSAqLworIyAgICBpbmNsdWRlIDxkZXNjcmlwLmg+CQkvKiBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KKyMgICAgaW5jbHVkZSA8ZHZpZGVmLmg+CQkJLyogRFZJJF9uYW1lICovCisjICAgIGluY2x1ZGUgPGZpbGUuaD4JCQkvKiAtPiBPX1JEV1IgKi8KKyMgICAgaW5jbHVkZSA8anBpZGVmLmg+CQkJLyogSlBJJF9uYW1lICovCisjICAgIGluY2x1ZGUgPGxpYiRyb3V0aW5lcy5oPgkJLyogTElCJG5hbWUgKi8KKyMgICAgaW5jbHVkZSA8b3RzJHJvdXRpbmVzLmg+CQkvKiBPVFMkbmFtZSAqLworIyAgICBpbmNsdWRlIDxzc2RlZi5oPgkJCS8qIFNTJF9uYW1lICovCisjICAgIGluY2x1ZGUgPHVuaXhpby5oPgorIyAgICBpbmNsdWRlIDx1bml4bGliLmg+CisjICAgIGluY2x1ZGUgPHN0YXQuaD4KKy8qIC0tLS0tICovCisvKiBERUNDIG9uIEFscGhhIGRvZXMgcmVkZWZpbmUgdGhlc2UgYWxyZWFkeSAqLworIyAgICBpZm5kZWYgc2hlbGwkZnJvbV92bXMKKyMgICAgICAgIGRlZmluZSBzaGVsbCRmcm9tX3ZtcyhfcDFfLF9wMl8sX3AzXykgZGVjYyRmcm9tX3ZtcyhfcDFfLF9wMl8sX3AzXykKKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHNoZWxsJHRyYW5zbGF0ZV92bXMKKyMgICAgICAgIGRlZmluZSBzaGVsbCR0cmFuc2xhdGVfdm1zKF9wMV8pIGRlY2MkdHJhbnNsYXRlX3ZtcyhfcDFfKQorIyAgICBlbmRpZgorIyAgICBpZm5kZWYgc2hlbGwkdG9fdm1zCisjICAgICAgICBkZWZpbmUgc2hlbGwkdG9fdm1zKF9wMV8sX3AyXyxfcDNfLF9wNF8sX3A1XykgXAorCQlkZWNjJHRvX3ZtcyhfcDFfLF9wMl8sX3AzXyxfcDRfLF9wNV8pCisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPHdhaXQuaD4JCQkvKiBkZWZpbmUgd2FpdCgpICovCisjZW5kaWYgLyogZGVmaW5lZChfX1ZNUykgKi8KKwogUHlEb2NfU1RSVkFSKHBvc2l4X19kb2NfXywKICJUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbmFsaXR5IHRoYXQgaXNcblwKIHN0YW5kYXJkaXplZCBieSB0aGUgQyBTdGFuZGFyZCBhbmQgdGhlIFBPU0lYIHN0YW5kYXJkIChhIHRoaW5seVxuXApAQCAtOTQsOCArMTIxLDggQEAKICNkZWZpbmUgSEFWRV9TWVNURU0JMQogI2RlZmluZSBIQVZFX0NXQUlUCTEKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLS8qIEV2ZXJ5dGhpbmcgbmVlZGVkIGlzIGRlZmluZWQgaW4gUEMvb3MyZW14L3B5Y29uZmlnLmggKi8KKyNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSB8fCBkZWZpbmVkKF9fVk1TKQorLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiBQQy9vczJlbXgvcHljb25maWcuaCBvciB2bXMvcHljb25maWcuaCAqLwogI2Vsc2UJCQkvKiBhbGwgb3RoZXIgY29tcGlsZXJzICovCiAvKiBVbml4IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCkBAIC0zMDQsNiArMzMxLDE5OCBAQAogZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwogI2VuZGlmIC8qICFfTVNDX1ZFUiAqLwogCisjaWYgZGVmaW5lZChfX1ZNUykKK3N0YXRpYyBjaGFyIHBzeG1vZF9ndF9wc3hwYXRoWzEwMjZdOworCitzdGF0aWMgaW50IAorcHN4bW9kX2Zyb21fdm1zX2FjdGlvbiAoY2hhciAqc3BlYykKK3sKKwkodm9pZClzdHJjcHkocHN4bW9kX2d0X3BzeHBhdGgsIHNwZWMpOworCXJldHVybiAxOworfQorCisvKiBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIFZNUyAnZW52aXJvbm1lbnQgdGFibGUnICovCitzdGF0aWMgY2hhciogYXRfaG9tZSA9ICJIT01FIjsKK3N0YXRpYyBjaGFyKiBhdF9wYXRoID0gIlBBVEgiOworCitzdGF0aWMgY2hhciBwc3htb2RfdF9jb21tYW5kIFtdID0gIlNZUyRDT01NQU5EIjsKKy8qIGFkZCBzb21lIHZhbHVlcyB0byBwcm92aWRlIGEgc2ltaWxhciBlbnZpcm9ubWVudCBsaWtlIFBPU0lYICovCit2b2lkCitwc21tb2RfYWRkX3Bvc2l4X2VudihQeU9iamVjdCAqZCkKK3sKKwkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCXN0cnVjdCBkc2MkZGVzY3JpcHRvcl9zIHJfZGV2aWNlX25hbWU7CisJbG9uZyBsX2RldmJ1ZnNpejsKKwlsb25nIGxfdHRfcGFnZTsKKwlsb25nIGxfaXRlbV9jb2RlOworCWxvbmcgbF9zdGF0dXM7CisJUHlPYmplY3QgKm87CisJc3RydWN0IGRzYyRkZXNjcmlwdG9yX3Mgcl9yZXN1bHRhbnRfc3RyaW5nOworCWNoYXIgdF9yZXN1bHRhbnRfc3RyaW5nWzEzXTsgLyogZW5vdWdoIHNwYWNlIGZvciB1c2VybmFtZSAoMTIpKyAnXDAnICovCisJY2hhciAqYXRfcmVzdWx0YW50X3N0cmluZzsKKwlzaG9ydCBpbnQgd19yZXN1bHRhbnRfbGVuZ3RoOworCisJLyogc2V0IHVwIHN0cmluZyBkZXNjcmlwdG9yICovCisJcl9kZXZpY2VfbmFtZS5kc2Mkd19sZW5ndGggID0gc3RybGVuKHBzeG1vZF90X2NvbW1hbmQpOworCXJfZGV2aWNlX25hbWUuZHNjJGJfZHR5cGUgPSBEU0MkS19EVFlQRV9UOworCXJfZGV2aWNlX25hbWUuZHNjJGJfY2xhc3MgPSBEU0MkS19DTEFTU19TOworCXJfZGV2aWNlX25hbWUuZHNjJGFfcG9pbnRlciA9ICZwc3htb2RfdF9jb21tYW5kWzBdOworCisJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwkvKiBDT0xVTU5TID0gJGdldGR2aSgiU1lTJENPTU1BTkQiLCJERVZCVUZTSVoiKSAqLworCWxfaXRlbV9jb2RlID0gRFZJJF9ERVZCVUZTSVo7CQorCWxfc3RhdHVzID0gbGliJGdldGR2aSgmbF9pdGVtX2NvZGUsCisJCQkgICAgICAwLAkJLyogW2NoYW5uZWxdCSAqLworCQkJICAgICAgJnJfZGV2aWNlX25hbWUsCisJCQkgICAgICAmbF9kZXZidWZzaXosCS8qIGludGVnZXItdmFsdWUgKi8KKwkJCSAgICAgIDAsCQkvKiByZXN1bHRhbnRfc3RyaW5nICovCisJCQkgICAgICAwKTsJCS8qIHJlc3VsdGFudF9sZW5ndGggKi8KKwlpZiAobF9zdGF0dXMgPT0gU1MkX05PUk1BTCkgeworCQkvKiBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGhlcmUgdG8gY29tcGx5IHdpdGggUE9TSVggKi8KKworCQkvKiBzZXQgdXAgc3RyaW5nIGRlc2NyaXB0b3IgKi8KKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyR3X2xlbmd0aCAgPQorCQkgICAgKHNpemVvZih0X3Jlc3VsdGFudF9zdHJpbmcpIC0gMSk7IC8qIG9tbWl0ICdcMCcgYXQgZW5kICovCisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYl9kdHlwZSAgID0gRFNDJEtfRFRZUEVfVDsKKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRiX2NsYXNzICAgPSBEU0MkS19DTEFTU19TOworCQlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGFfcG9pbnRlciA9ICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF07CisKKwkJLyogQ29udmVydCBTaWduZWQgSW50ZWdlciB0byBEZWNpbWFsIFRleHQgKi8KKwkJbF9zdGF0dXMgPSBvdHMkY3Z0X2xfdGkoJmxfZGV2YnVmc2l6LCAmcl9yZXN1bHRhbnRfc3RyaW5nLCAxLAorCQkJCQk0LCAwKTsKKwkJaWYgKGxfc3RhdHVzID09IFNTJF9OT1JNQUwpIHsKKwkJCS8qIHRlcm1pbmF0ZSBzdHJpbmcgZm9yICdDJy1zdHlsZSAqLworCQkJdF9yZXN1bHRhbnRfc3RyaW5nW3NpemVvZih0X3Jlc3VsdGFudF9zdHJpbmcpLTFdID0gJ1wwJzsKKwkJCS8qIHN0cmluZyBhcHBlYXJzIGFzOiAnICAgICAgdmFsdWUnIC0tIHNraXAgJyAnICovCisJCQlhdF9yZXN1bHRhbnRfc3RyaW5nID0gJnRfcmVzdWx0YW50X3N0cmluZ1swXTsKKwkJCXdoaWxlICgoKmF0X3Jlc3VsdGFudF9zdHJpbmcgPT0gJyAnICkgJiYgCisJCSAgICAgICAJICAgICAgICgqYXRfcmVzdWx0YW50X3N0cmluZyAhPSAnXDAnKSkgeworCQkJCWF0X3Jlc3VsdGFudF9zdHJpbmcrKzsJLyogc2tpcCBwcmVmaXggc3BhY2VzICovCisJCQl9CisKKwkJCW8gPSBQeV9CdWlsZFZhbHVlKCJzIiwgYXRfcmVzdWx0YW50X3N0cmluZyk7CisJCQlpZiAobyAhPSBOVUxMKSB7CisJCQkJKHZvaWQpIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJDT0xVTU5TIiwgbyk7CisJCQkJUHlfREVDUkVGKG8pOworCQkJfQorCQl9IC8qIChsX3N0YXR1cyA9IG90cyRjdnRfbF90aSgpID09IFNTJF9OT1JNQUwpICovCisJfSAvKiAobF9zdGF0dXMgPSBsaWIkZ2V0ZHZpKERWSSRfREVWQlVGU0laKSA9PSBTUyRfTk9STUFMKSAqLworCS8qIExJTkVTID0gJGdldGR2aSgiU1lTJENPTU1BTkQiLCJUVF9QQUdFIikgKi8KKwlsX2l0ZW1fY29kZSA9IERWSSRfVFRfUEFHRTsKKwlsX3N0YXR1cyA9IGxpYiRnZXRkdmkoJmxfaXRlbV9jb2RlLAorCQkJICAgICAgMCwJCS8qIFtjaGFubmVsXQkgKi8KKwkJCSAgICAgICZyX2RldmljZV9uYW1lLAorCQkgICAgICAgICAgICAgICZsX3R0X3BhZ2UsCS8qIGludGVnZXItdmFsdWUgKi8KKwkJCSAgICAgIDAsCQkvKiByZXN1bHRhbnRfc3RyaW5nICovCisJCQkgICAgICAwKTsJCS8qIHJlc3VsdGFudF9sZW5ndGggKi8KKwlpZiAobF9zdGF0dXMgPT0gU1MkX05PUk1BTCkgeworCQkvKiBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGhlcmUgdG8gY29tcGx5IHdpdGggUE9TSVggKi8KKworCQkvKiBzZXQgdXAgc3RyaW5nIGRlc2NyaXB0b3IgKi8KKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyR3X2xlbmd0aCAgPQorCQkgICAgKHNpemVvZih0X3Jlc3VsdGFudF9zdHJpbmcpIC0gMSk7IC8qIG9tbWl0ICdcMCcgYXQgZW5kICovCisJCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYl9kdHlwZSAgID0gRFNDJEtfRFRZUEVfVDsKKwkJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRiX2NsYXNzICAgPSBEU0MkS19DTEFTU19TOworCQlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGFfcG9pbnRlciA9ICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF07CisKKwkJLyogQ29udmVydCBTaWduZWQgSW50ZWdlciB0byBEZWNpbWFsIFRleHQgKi8KKwkJbF9zdGF0dXMgPSBvdHMkY3Z0X2xfdGkoJmxfdHRfcGFnZSwgJnJfcmVzdWx0YW50X3N0cmluZywKKwkJCQkJMSwgNCwgMCk7CisJCWlmIChsX3N0YXR1cyA9PSBTUyRfTk9STUFMKSB7CisJCQkvKiB0ZXJtaW5hdGUgc3RyaW5nIGZvciAnQyctc3R5bGUgKi8KKwkJICAgIAl0X3Jlc3VsdGFudF9zdHJpbmdbc2l6ZW9mKHRfcmVzdWx0YW50X3N0cmluZyktMV0gPSAnXDAnOworCQkgICAgCS8qIHN0cmluZyBhcHBlYXJzIGFzOiAnICAgICAgdmFsdWUnIC0tIHNraXAgJyAnICovCisJCSAgICAJYXRfcmVzdWx0YW50X3N0cmluZyA9ICZ0X3Jlc3VsdGFudF9zdHJpbmdbMF07CisJCSAgICAJd2hpbGUgKCgqYXRfcmVzdWx0YW50X3N0cmluZyA9PSAnICcgKSAmJiAKKwkJCSAgICAgICAoKmF0X3Jlc3VsdGFudF9zdHJpbmcgIT0gJ1wwJykpIHsKKwkJCQlhdF9yZXN1bHRhbnRfc3RyaW5nKys7IC8qIHNraXAgcHJlZml4IHNwYWNlcyAqLworCQkJfQorCisJCSAgICAJbyA9IFB5X0J1aWxkVmFsdWUoInMiLCBhdF9yZXN1bHRhbnRfc3RyaW5nKTsKKwkJICAgIAlpZiAobyAhPSBOVUxMKSB7CisJCQkJKHZvaWQpUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkxJTkVTIiwgbyk7CisJCQkJUHlfREVDUkVGKG8pOworCQkJfQorCQl9IC8qIChsX3N0YXR1cyA9IG90cyRjdnRfbF90aSgpID09IFNTJF9OT1JNQUwpICovCisJfSAvKiAobF9zdGF0dXMgPSBsaWIkZ2V0ZHZpKERWSSRfVFRfUEFHRSkgPT0gU1MkX05PUk1BTCkgKi8KKwkvKiBlbHNlIC0tIGlnbm9yZSBlcnJvciAqLworCisJLyogTE9HTkFNRSA9ICRnZXRqcGkoMCwiVVNFUk5BTUUiKSAqLworCWxfaXRlbV9jb2RlID0gSlBJJF9VU0VSTkFNRTsKKworCS8qIHNldCB1cCBzdHJpbmcgZGVzY3JpcHRvciAqLworCXJfcmVzdWx0YW50X3N0cmluZy5kc2Mkd19sZW5ndGggID0KKwkJICAgIChzaXplb2YodF9yZXN1bHRhbnRfc3RyaW5nKSAtIDEpOyAvKiBvbW1pdCAnXDAnIGF0IGVuZCAqLworCXJfcmVzdWx0YW50X3N0cmluZy5kc2MkYl9kdHlwZSAgID0gRFNDJEtfRFRZUEVfVDsKKwlyX3Jlc3VsdGFudF9zdHJpbmcuZHNjJGJfY2xhc3MgICA9IERTQyRLX0NMQVNTX1M7CisJcl9yZXN1bHRhbnRfc3RyaW5nLmRzYyRhX3BvaW50ZXIgPSAmdF9yZXN1bHRhbnRfc3RyaW5nWzBdOworCisJbF9zdGF0dXMgPSBsaWIkZ2V0anBpKCZsX2l0ZW1fY29kZSwgMCwgMCwgMCwKKwkJCSAgICAgICZyX3Jlc3VsdGFudF9zdHJpbmcsICZ3X3Jlc3VsdGFudF9sZW5ndGgpOworCWlmIChsX3N0YXR1cyA9PSBTUyRfTk9STUFMKXsKKwkJdF9yZXN1bHRhbnRfc3RyaW5nW3dfcmVzdWx0YW50X2xlbmd0aF0gPSAnXDAnOworCisJCS8qIHJlbW92ZSBhbnkgdHJhaWxpbmcgc3BhY2VzIGJ5IHJlcGxhY2luZyAxc3Qgb25lIHdpdGggJ1wwJyAqLworCQlhdF9yZXN1bHRhbnRfc3RyaW5nID0gJnRfcmVzdWx0YW50X3N0cmluZ1swXTsKKwkJd2hpbGUgKCgqYXRfcmVzdWx0YW50X3N0cmluZyAhPSAnICcgKSAmJgorCQkgICAgICAgKCphdF9yZXN1bHRhbnRfc3RyaW5nICE9ICdcMCcpKSB7CisJCQkvKiBsb3dlcmNhc2UgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQT1NJWCAqLworCQkJKmF0X3Jlc3VsdGFudF9zdHJpbmcgPSB0b2xvd2VyKCphdF9yZXN1bHRhbnRfc3RyaW5nKTsKKwkJCWF0X3Jlc3VsdGFudF9zdHJpbmcrKzsJLyogc2tpcCBub24tYmxhbmsgKi8KKwkJfQorCQkqYXRfcmVzdWx0YW50X3N0cmluZyA9ICdcMCc7CS8qIHRlcm1pbmF0ZSAqLworCisJCW8gPSBQeV9CdWlsZFZhbHVlKCJzIiwgJnRfcmVzdWx0YW50X3N0cmluZ1swXSk7CisJCWlmIChvICE9IE5VTEwpIHsKKwkJCSh2b2lkKSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTE9HTkFNRSIsIG8pOworCQkJKHZvaWQpIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJVU0VSTkFNRSIsIG8pOworCQkJUHlfREVDUkVGKG8pOworCQl9CisJfSAvKiAobF9zdGF0dXMgPT0gU1MkX05PUk1BTCkgKi8KKworCS8qIE9TID0gIk9wZW5WTVMiICovCisJbyA9IFB5U3RyaW5nX0Zyb21TdHJpbmcgKCJPcGVuVk1TIik7CisJaWYgKG8gIT0gTlVMTCkgeworCQkodm9pZClQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiT1MiLCBvKTsKKwkJUHlfREVDUkVGKG8pOworCX0KK30KKworLyogQEAgcG9zaXggZW52OgorQ09MVU1OUz04MAkkIHdyaXRlIHN5cyRvdXRwdXQgZiRnZXRkdmkoIlNZUyRDT01NQU5EIiwiREVWQlVGU0laIikKK0xJTkVTPTQ3CSQgd3JpdGUgc3lzJG91dHB1dCBmJGdldGR2aSgiU1lTJENPTU1BTkQiLCJUVF9QQUdFIikKK0xPR05BTUU9emVzc2luCSQgd3JpdGUgc3lzJG91dHB1dCBmJGVkaXQoZiRnZXRqcGkoMCwidXNlcm5hbWUiKSwgLQorCQkJImNvbGxhcHNlLGxvd2VyY2FzZSIpCitPUz1PcGVuVk1TCitQUzE9SEVSRSAkCisKK1RaPUNFVC0xOjAwQ0VUIERTVCxNMy41LjAvMjowMCxNMTAuNS4wLzM6MDAKKwkJJCB3cml0ZSBzeXMkb3V0cHV0IGYkdHJubG5tKCJQT1NJWCRERUZBVUxUX1RaIikKKwkJCSJDRVQtMTowMENFVCBEU1QtMjowMCxNMy41LjAvMjowMCxNMTAuNS4wLzM6MDAiCisJCSQgd3JpdGUgc3lzJG91dHB1dCBmJHRybmxubSgiVUNYJFRaIikKKwkJCSJNRVQtMU1FVF9EU1QtMixNMy41LjAvMixNMTAuNS4wLzMiCitQQUdFUj1tb3JlCitURVJNPXZ0MzAwX3NlcmllcworU0hFTEw9L2Jpbi9zaAorSE9NRT0vZGthMTAwL3VzZXIvemVzc2luCitfPS9iaW4vZW52CisKKz4+PiBmb3IgdiBpbiBvcy5lbnZpcm9uLml0ZW1zKCk6CisuLi4gICBwcmludCB2CisuLi4KKygnSE9NRScsICcvdXNlcl9oZXJlL3plc3NpbicpCisoJ0NPTFVNTlMnLCAnODAnKQorKCdMSU5FUycsICcyNCcpCisoJ1BBVEgnLCAnL3B5dGhvbl9kaXNrL3B5dGhvbi9weXRob24tMV81XzIvdm1zJykKKygnT1MnLCAnT3BlblZNUycpCisoJ1VTRVInLCAnWkVTU0lOJykKKygnTE9HTkFNRScsICd6ZXNzaW4nKQorKCdURVJNJywgJ3Z0MzAwLTgwJykKKygnVVNFUk5BTUUnLCAnemVzc2luJykKKz4+PgorKi8KKyNlbmRpZiAvKiBfX1ZNUyAqLworCiBzdGF0aWMgUHlPYmplY3QgKgogY29udmVydGVudmlyb24odm9pZCkKIHsKQEAgLTMzMCw3ICs1NDksMTkgQEAKIAkJCVB5RXJyX0NsZWFyKCk7CiAJCQljb250aW51ZTsKIAkJfQorI2lmIGRlZmluZWQoX19WTVMpCisJCWlmICgoc3RybmNtcChhdF9ob21lLCAqZSwgc2l6ZW9mKGF0X2hvbWUpKSA9PSAwKSB8fAorCQkgICAgKHN0cm5jbXAoYXRfcGF0aCwgKmUsIHNpemVvZihhdF9wYXRoKSkgPT0gMCkpIHsKKwkJCSh2b2lkKXNoZWxsJGZyb21fdm1zKHArMSwgcHN4bW9kX2Zyb21fdm1zX2FjdGlvbiwgMCk7CisJCQkvKiAwID0gbm8gd2lsZGNhcmQgZXhwYW5zaW9uICovCisJCQl2ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwc3htb2RfZ3RfcHN4cGF0aCk7CisJCX0KKwkJZWxzZSB7CisJCQl2ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwKzEpOworCQl9CisjZWxzZQogCQl2ID0gUHlTdHJpbmdfRnJvbVN0cmluZyhwKzEpOworI2VuZGlmCiAJCWlmICh2ID09IE5VTEwpIHsKIAkJCVB5RXJyX0NsZWFyKCk7CiAJCQlQeV9ERUNSRUYoayk7CkBAIC0zNDMsNiArNTc0LDkgQEAKIAkJUHlfREVDUkVGKGspOwogCQlQeV9ERUNSRUYodik7CiAJfQorI2lmIGRlZmluZWQoX19WTVMpCisgICAgICAgIHBzbW1vZF9hZGRfcG9zaXhfZW52KGQpOworI2VuZGlmIC8qIGRlZmluZWQoX19WTVMpICovCiAjaWYgZGVmaW5lZChQWU9TX09TMikKICAgICB7CiAgICAgICAgIEFQSVJFVCByYzsKQEAgLTg5NSw3ICsxMTI5LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZG9fc3RhdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIAogCSAgICAgIGNoYXIgKmZvcm1hdCwKKyNpZmRlZiBfX1ZNUworCSAgICAgIGludCAoKnN0YXRmdW5jKShjb25zdCBjaGFyICosIFNUUlVDVF9TVEFUICosIC4uLiksCisjZWxzZQogCSAgICAgIGludCAoKnN0YXRmdW5jKShjb25zdCBjaGFyICosIFNUUlVDVF9TVEFUICopLAorI2VuZGlmCiAJICAgICAgY2hhciAqd2Zvcm1hdCwKIAkgICAgICBpbnQgKCp3c3RhdGZ1bmMpKGNvbnN0IFB5X1VOSUNPREUgKiwgU1RSVUNUX1NUQVQgKikpCiB7CkBAIC0xMDQ4LDcgKzEyODYsMTcgQEAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6dHR5bmFtZSIsICZpZCkpCiAJCXJldHVybiBOVUxMOwogCisjaWYgZGVmaW5lZChfX1ZNUykKKwkvKiBERUNDIFY1LjAgLSBvbmx5IGFib3V0IEZEPSAwIEBAIHRyeSBnZXRuYW1lKCkrJGdldGR2aShkdmkkX2Rldm5hbSkgKi8KKwlpZiAoaWQgPT0gMCkgeworCQlyZXQgPSB0dHluYW1lKCk7CisJfQorCWVsc2UgeworCQlyZXQgPSBOVUxMOworCX0KKyNlbHNlCiAJcmV0ID0gdHR5bmFtZShpZCk7CisjZW5kaWYKIAlpZiAocmV0ID09IE5VTEwpCiAJCXJldHVybihwb3NpeF9lcnJvcigpKTsKIAlyZXR1cm4oUHlTdHJpbmdfRnJvbVN0cmluZyhyZXQpKTsKQEAgLTEwOTIsOCArMTM0MCwxMyBAQAogI2VsaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKIAlyZXR1cm4gcG9zaXhfMXN0cihhcmdzLCAiZXQ6Y2hkaXIiLCBfY2hkaXIyLCBOVUxMLCBOVUxMKTsKICNlbHNlCisjaWZkZWYgX19WTVMKKwlyZXR1cm4gcG9zaXhfMXN0cihhcmdzLCAiZXQ6Y2hkaXIiLCAoaW50ICgqKShjb25zdCBjaGFyICopKWNoZGlyLCAKKwkJCSAgTlVMTCwgTlVMTCk7CisjZWxzZQogCXJldHVybiBwb3NpeF8xc3RyKGFyZ3MsICJldDpjaGRpciIsIGNoZGlyLCBOVUxMLCBOVUxMKTsKICNlbmRpZgorI2VuZGlmCiB9CiAKICNpZmRlZiBIQVZFX0ZDSERJUgpAQCAtMTI0Nyw4ICsxNTAwLDEzIEBACiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKIAlyZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwogI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVk1TKQorCS8qIDAgPSBmb3JjZSBVbml4LXN0eWxlIHBhdGggaWYgaW4gdGhlIFZNUyBEQ0wgZW52aXJvbm1lbnQhICovCisJcmVzID0gZ2V0Y3dkKGJ1Ziwgc2l6ZW9mIGJ1ZiwgMCk7CisjZWxzZQogCXJlcyA9IGdldGN3ZChidWYsIHNpemVvZiBidWYpOwogI2VuZGlmCisjZW5kaWYKIAlQeV9FTkRfQUxMT1dfVEhSRUFEUwogCWlmIChyZXMgPT0gTlVMTCkKIAkJcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC01MTE1LDcgKzUzNzMsMTEgQEAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpwaXBlIikpCiAJCXJldHVybiBOVUxMOwogCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZiBkZWZpbmVkKF9fVk1TKQorCXJlcyA9IHBpcGUoZmRzLDAsMjEwMCk7IC8qIGJpZ2dlciBtYWlsYm94IHF1b3RhIHRoYW4gNTEyICovCisjZWxzZQogCXJlcyA9IHBpcGUoZmRzKTsKKyNlbmRpZgogCVB5X0VORF9BTExPV19USFJFQURTCiAJaWYgKHJlcyAhPSAwKQogCQlyZXR1cm4gcG9zaXhfZXJyb3IoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCmluZGV4IDkxMzRlZGMuLjdlM2MzYWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHdkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wd2Rtb2R1bGUuYwpAQCAtNjcsMTAgKzY3LDE4IEBACiAjZGVmaW5lIFNFVFMoaSx2YWwpIHNldHModiwgaSwgdmFsKQogCiAJU0VUUyhzZXRJbmRleCsrLCBwLT5wd19uYW1lKTsKKyNpZmRlZiBfX1ZNUworCVNFVFMoc2V0SW5kZXgrKywgIiIpOworI2Vsc2UKIAlTRVRTKHNldEluZGV4KyssIHAtPnB3X3Bhc3N3ZCk7CisjZW5kaWYKIAlTRVRJKHNldEluZGV4KyssIHAtPnB3X3VpZCk7CiAJU0VUSShzZXRJbmRleCsrLCBwLT5wd19naWQpOworI2lmZGVmIF9fVk1TCisJU0VUUyhzZXRJbmRleCsrLCAiIik7CisjZWxzZQogCVNFVFMoc2V0SW5kZXgrKywgcC0+cHdfZ2Vjb3MpOworI2VuZGlmCiAJU0VUUyhzZXRJbmRleCsrLCBwLT5wd19kaXIpOwogCVNFVFMoc2V0SW5kZXgrKywgcC0+cHdfc2hlbGwpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwppbmRleCAyYWZhNjk3Li43MTY4NWM1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKQEAgLTE0OCw2ICsxNDgsMTUgQEAKICMgaW5jbHVkZSA8Y3R5cGUuaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChfX1ZNUykgJiYgISBkZWZpbmVkKF9TT0NLQUREUl9MRU4pCisjICAgaWZkZWYgZ2V0YWRkcmluZm8KKyMgICAgICB1bmRlZiBnZXRhZGRyaW5mbworIyAgIGVuZGlmCisjICBpbmNsdWRlICJUQ1BJUF9JT0NUTF9ST1VUSU5FIgorI2Vsc2UKKyMgIGluY2x1ZGUgPGlvY3RsLmg+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoUFlPU19PUzIpCiAjIGRlZmluZSAgSU5DTF9ET1MKICMgZGVmaW5lICBJTkNMX0RPU0VSUk9SUwpAQCAtMjcwLDYgKzI3OSwxMSBAQAogI2RlZmluZSBTT0NLRVRDTE9TRSBjbG9zZQogI2VuZGlmCiAKKyNpZmRlZiBfX1ZNUworLyogVENQL0lQIFNlcnZpY2VzIGZvciBWTVMgdXNlcyBhIG1heGltdW0gc2VuZC9yZXZjIGJ1ZmZlciBsZW5ndGggb2YgNjU1MzUgKi8KKyNkZWZpbmUgU0VHTUVOVF9TSVpFIDY1NTM1CisjZW5kaWYKKwogLyogWFhYIFRoZXJlJ3MgYSBwcm9ibGVtIGhlcmU6ICpzdGF0aWMqIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvc2VkIHRvIGhhdmUKICAgIGEgUHkgcHJlZml4IChvciB1c2UgQ2FwaXRhbGl6ZWRXb3JkcykuICBMYXRlci4uLiAqLwogCkBAIC00ODUsNyArNDk5LDEwIEBACiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCiAJYmxvY2sgPSAhYmxvY2s7CiAJaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNhZGRyX3QpJmJsb2NrLCBzaXplb2YoYmxvY2spKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLworI2VsaWYgZGVmaW5lZChfX1ZNUykKKwlibG9jayA9ICFibG9jazsKKwlpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAoY2hhciAqKSZibG9jayk7CisjZWxzZSAgLyogIVBZT1NfT1MyICYmICFfVk1TICovCiAJZGVsYXlfZmxhZyA9IGZjbnRsKHMtPnNvY2tfZmQsIEZfR0VURkwsIDApOwogCWlmIChibG9jaykKIAkJZGVsYXlfZmxhZyAmPSAofk9fTk9OQkxPQ0spOwpAQCAtMTIyMyw3ICsxMjQwLDExIEBACiAJCQlyZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAJCXJldHVybiBQeUludF9Gcm9tTG9uZyhmbGFnKTsKIAl9CisjaWZkZWYgX19WTVMKKwlpZiAoYnVmbGVuID4gMTAyNCkgeworI2Vsc2UKIAlpZiAoYnVmbGVuIDw9IDAgfHwgYnVmbGVuID4gMTAyNCkgeworI2VuZGlmCiAJCVB5RXJyX1NldFN0cmluZyhzb2NrZXRfZXJyb3IsCiAJCQkJImdldHNvY2tvcHQgYnVmbGVuIG91dCBvZiByYW5nZSIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE1NjAsOSArMTU4MSwyMyBAQAogI2VuZGlmCiAJRklMRSAqZnA7CiAJUHlPYmplY3QgKmY7CisjaWZkZWYgX19WTVMKKwljaGFyICptb2RlX3IgPSAiciI7CisJY2hhciAqbW9kZV93ID0gInciOworI2VuZGlmCiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxzaTptYWtlZmlsZSIsICZtb2RlLCAmYnVmc2l6ZSkpCiAJCXJldHVybiBOVUxMOworI2lmZGVmIF9fVk1TCisJaWYgKHN0cmNtcChtb2RlLCJyYiIpID09IDApIHsKKwkgICAgbW9kZSA9IG1vZGVfcjsKKwl9CisJZWxzZSB7CisJCWlmIChzdHJjbXAobW9kZSwid2IiKSA9PSAwKSB7CisJCQltb2RlID0gbW9kZV93OworCQl9CisJfQorI2VuZGlmCiAjaWZkZWYgTVNfV0lOMzIKIAlpZiAoKChmZCA9IF9vcGVuX29zZmhhbmRsZShzLT5zb2NrX2ZkLCBfT19CSU5BUlkpKSA8IDApIHx8CiAJICAgICgoZmQgPSBkdXAoZmQpKSA8IDApIHx8ICgoZnAgPSBmZG9wZW4oZmQsIG1vZGUpKSA9PSBOVUxMKSkKQEAgLTE2MDEsNiArMTYzNiwxMCBAQAogewogCWludCBsZW4sIG4sIGZsYWdzID0gMDsKIAlQeU9iamVjdCAqYnVmOworI2lmZGVmIF9fVk1TCisJaW50IHJlYWRfbGVuZ3RoOworCWNoYXIgKnJlYWRfYnVmOworI2VuZGlmCiAKIAlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIml8aTpyZWN2IiwgJmxlbiwgJmZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNjE1LDYgKzE2NTQsNyBAQAogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKKyNpZm5kZWYgX19WTVMKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCiAJaW50ZXJuYWxfc2VsZWN0KHMsIDApOwogCW4gPSByZWN2KHMtPnNvY2tfZmQsIFB5U3RyaW5nX0FTX1NUUklORyhidWYpLCBsZW4sIGZsYWdzKTsKQEAgLTE2MjYsNiArMTY2Niw0MiBAQAogCX0KIAlpZiAobiAhPSBsZW4pCiAJCV9QeVN0cmluZ19SZXNpemUoJmJ1Ziwgbik7CisjZWxzZQorCXJlYWRfYnVmID0gUHlTdHJpbmdfQXNTdHJpbmcoYnVmKTsKKwlyZWFkX2xlbmd0aCA9IGxlbjsKKwl3aGlsZSAocmVhZF9sZW5ndGggIT0gMCkgeworCQl1bnNpZ25lZCBpbnQgc2VnbWVudDsKKworCQlzZWdtZW50ID0gcmVhZF9sZW5ndGggL1NFR01FTlRfU0laRTsKKwkJaWYgKHNlZ21lbnQgIT0gMCkgeworCQkJc2VnbWVudCA9IFNFR01FTlRfU0laRTsKKwkJfQorCQllbHNlIHsKKwkJCXNlZ21lbnQgPSByZWFkX2xlbmd0aDsKKwkJfQorCisJCVB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAJICAJaW50ZXJuYWxfc2VsZWN0KHMsIDApOworCQluID0gcmVjdihzLT5zb2NrX2ZkLCByZWFkX2J1Ziwgc2VnbWVudCwgZmxhZ3MpOworCQlQeV9FTkRfQUxMT1dfVEhSRUFEUworCisJCWlmIChuIDwgMCkgeworCQkJUHlfREVDUkVGKGJ1Zik7CisJCQlyZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CisJCX0KKwkJaWYgKG4gIT0gcmVhZF9sZW5ndGgpIHsKKwkJCXJlYWRfYnVmICs9IG47CisJCQlicmVhazsKKwkJfQorCisJCXJlYWRfbGVuZ3RoIC09IHNlZ21lbnQ7CisJCXJlYWRfYnVmICs9IHNlZ21lbnQ7CisJfQorCWlmIChfUHlTdHJpbmdfUmVzaXplKCZidWYsIChyZWFkX2J1ZiAtIFB5U3RyaW5nX0FzU3RyaW5nKGJ1ZikpKSA8IDApCisJeworCSAgICByZXR1cm4gTlVMTDsKKwl9CisjZW5kaWYgLyogIV9fVk1TICovCiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtMTcwNywxMCArMTc4MywxNCBAQAogewogCWNoYXIgKmJ1ZjsKIAlpbnQgbGVuLCBuLCBmbGFncyA9IDA7CisjaWZkZWYgX19WTVMKKwlpbnQgc2VuZF9sZW5ndGg7CisjZW5kaWYKIAogCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyN8aTpzZW5kIiwgJmJ1ZiwgJmxlbiwgJmZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKKyNpZm5kZWYgX19WTVMKIAlQeV9CRUdJTl9BTExPV19USFJFQURTCiAJaW50ZXJuYWxfc2VsZWN0KHMsIDEpOwogCW4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CkBAIC0xNzE4LDYgKzE3OTgsMzEgQEAKIAogCWlmIChuIDwgMCkKIAkJcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOworI2Vsc2UKKwkvKiBEaXZpZGUgcGFja2V0IGludG8gc21hbGxlciBzZWdtZW50cyBmb3IJKi8KKwkvKiAgVENQL0lQIFNlcnZpY2VzIGZvciBPcGVuVk1TCQkJKi8KKwlzZW5kX2xlbmd0aCA9IGxlbjsKKwl3aGlsZSAoc2VuZF9sZW5ndGggIT0gMCkgeworCQl1bnNpZ25lZCBpbnQgc2VnbWVudDsKKworCQlzZWdtZW50ID0gc2VuZF9sZW5ndGggLyBTRUdNRU5UX1NJWkU7CisJCWlmIChzZWdtZW50ICE9IDApIHsKKwkJCXNlZ21lbnQgPSBTRUdNRU5UX1NJWkU7CisJCX0KKwkJZWxzZSB7CisJCQlzZWdtZW50ID0gc2VuZF9sZW5ndGg7CisJCX0KKwkJUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworCQlpbnRlcm5hbF9zZWxlY3QocywgMSk7CisJCW4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1Ziwgc2VnbWVudCwgZmxhZ3MpOworCQlQeV9FTkRfQUxMT1dfVEhSRUFEUworCQlpZiAobiA8IDApIHsKKwkJCXJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKKwkJfQorCQlzZW5kX2xlbmd0aCAtPSBzZWdtZW50OworCQlidWYgKz0gc2VnbWVudDsKKwl9IC8qIGVuZCB3aGlsZSAqLworI2VuZGlmIC8qICFfX1ZNUyAqLwogCXJldHVybiBQeUludF9Gcm9tTG9uZygobG9uZyluKTsKIH0KIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdvYmplY3QuYyBiL09iamVjdHMvc3RyaW5nb2JqZWN0LmMKaW5kZXggYzIzNGIwNC4uM2E2OWFhOSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdvYmplY3QuYworKysgYi9PYmplY3RzL3N0cmluZ29iamVjdC5jCkBAIC03NjUsNyArNzY1LDExIEBACiAJCXJldHVybiByZXQ7CiAJfQogCWlmIChmbGFncyAmIFB5X1BSSU5UX1JBVykgewotCQlmd3JpdGUob3AtPm9iX3N2YWwsIDEsIChpbnQpIG9wLT5vYl9zaXplLCBmcCk7CisjaWZkZWYgX19WTVMKKyAgICAgICAgICAgICAgICBpZiAob3AtPm9iX3NpemUpIGZ3cml0ZShvcC0+b2Jfc3ZhbCwgKGludCkgb3AtPm9iX3NpemUsIDEsIGZwKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZndyaXRlKG9wLT5vYl9zdmFsLCAxLCAoaW50KSBvcC0+b2Jfc2l6ZSwgZnApOworI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvUHl0aG9uL2V4Y2VwdGlvbnMuYyBiL1B5dGhvbi9leGNlcHRpb25zLmMKaW5kZXggMDE1ZDQ1YS4uMTZiNjczOCAxMDA2NDQKLS0tIGEvUHl0aG9uL2V4Y2VwdGlvbnMuYworKysgYi9QeXRob24vZXhjZXB0aW9ucy5jCkBAIC02Nyw2ICs2Nyw3IEBACiAgfCAgICB8ICAgICstLSBPU0Vycm9yXG5cCiAgfCAgICB8ICAgICAgICAgfFxuXAogIHwgICAgfCAgICAgICAgICstLSBXaW5kb3dzRXJyb3JcblwKKyB8ICAgIHwgICAgICAgICArLS0gVk1TRXJyb3JcblwKICB8ICAgIHxcblwKICB8ICAgICstLSBFT0ZFcnJvclxuXAogIHwgICAgKy0tIFJ1bnRpbWVFcnJvclxuXApAQCAtNjQzLDYgKzY0NCwxMSBAQAogUHlEb2NfU1RSVkFSKFdpbmRvd3NFcnJvcl9fZG9jX18sICJNUy1XaW5kb3dzIE9TIHN5c3RlbSBjYWxsIGZhaWxlZC4iKTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKKyNpZmRlZiBfX1ZNUworc3RhdGljIGNoYXIKK1ZNU0Vycm9yX19kb2NfX1tdID0gIk9wZW5WTVMgT1Mgc3lzdGVtIGNhbGwgZmFpbGVkLiI7CisjZW5kaWYKKwogUHlEb2NfU1RSVkFSKEVPRkVycm9yX19kb2NfXywgIlJlYWQgYmV5b25kIGVuZCBvZiBmaWxlLiIpOwogCiBQeURvY19TVFJWQVIoUnVudGltZUVycm9yX19kb2NfXywgIlVuc3BlY2lmaWVkIHJ1bi10aW1lIGVycm9yLiIpOwpAQCAtMTU5OSw2ICsxNjA1LDkgQEAKICNpZmRlZiBNU19XSU5ET1dTCiBQeU9iamVjdCAqUHlFeGNfV2luZG93c0Vycm9yOwogI2VuZGlmCisjaWZkZWYgX19WTVMKK1B5T2JqZWN0ICpQeUV4Y19WTVNFcnJvcjsKKyNlbmRpZgogCiAvKiBQcmUtY29tcHV0ZWQgTWVtb3J5RXJyb3IgaW5zdGFuY2UuICBCZXN0IHRvIGNyZWF0ZSB0aGlzIGFzIGVhcmx5IGFzCiAgKiBwb3NzaWJseSBhbmQgbm90IHdhaXQgdW50aWwgYSBNZW1vcnlFcnJvciBpcyBhY3R1YWxseSByYWlzZWQhCkBAIC0xNjUwLDYgKzE2NTksMTAgQEAKICB7IldpbmRvd3NFcnJvciIsICZQeUV4Y19XaW5kb3dzRXJyb3IsICZQeUV4Y19PU0Vycm9yLAogICBXaW5kb3dzRXJyb3JfX2RvY19ffSwKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjaWZkZWYgX19WTVMKKyB7IlZNU0Vycm9yIiwgJlB5RXhjX1ZNU0Vycm9yLCAmUHlFeGNfT1NFcnJvciwKKyAgVk1TRXJyb3JfX2RvY19ffSwKKyNlbmRpZgogIHsiRU9GRXJyb3IiLCAgICAgJlB5RXhjX0VPRkVycm9yLCAgICAgMCwgRU9GRXJyb3JfX2RvY19ffSwKICB7IlJ1bnRpbWVFcnJvciIsICZQeUV4Y19SdW50aW1lRXJyb3IsIDAsIFJ1bnRpbWVFcnJvcl9fZG9jX199LAogIHsiTm90SW1wbGVtZW50ZWRFcnJvciIsICZQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLApkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydC5jIGIvUHl0aG9uL2ltcG9ydC5jCmluZGV4IDRkMGNkYmIuLmQ5MjFkNzQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnQuYworKysgYi9QeXRob24vaW1wb3J0LmMKQEAgLTY5Myw4ICs2OTMsMTEgQEAKICNpZmRlZiBPX0JJTkFSWQogCQkJCXxPX0JJTkFSWSAgIC8qIG5lY2Vzc2FyeSBmb3IgV2luZG93cyAqLwogI2VuZGlmCi0KLQkJCSwgMDY2Nik7CisjaWZkZWYgX19WTVMKKyAgICAgICAgICAgICAgICAgICAgICAgICwgMDY2NiwgImN0eHQ9YmluIiwgInNocj1uaWwiKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAsIDA2NjYpOworI2VuZGlmCiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIGZkb3BlbihmZCwgIndiIik7Cg==